Làm thế nào để có được thuộc tính data-id?


813

Tôi đang sử dụng plugin quicksand jQuery. Tôi cần lấy id dữ liệu của mục được nhấp và chuyển nó vào dịch vụ web. Làm cách nào để có được thuộc tính data-id? Tôi đang sử dụng .on()phương pháp để liên kết lại sự kiện nhấp chuột cho các mục được sắp xếp.

$("#list li").on('click', function() {
  //  ret = DetailsView.GetProject($(this).attr("#data-id"), OnComplete, OnTimeOut, OnError);
  alert($(this).attr("#data-id"));
});
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>

<ul id="list" class="grid">
  <li data-id="id-40" class="win">
    <a id="ctl00_cphBody_ListView1_ctrl0_SelectButton" class="project" href="#">
      <img src="themes/clean/images/win.jpg" class="project-image" alt="get data-id" />
    </a>
  </li>
</ul>


57
Thông báo cho khách truy cập mới: Phương thức .live () của JQuery đã không được chấp nhận để ủng hộ
.on

3
Bạn nên xóa # khỏi cảnh báo, bạn không cần nó :-)
Carter

attr ("# data-id")) là sai. đã sửa: attr ("data-id"));
guido _nhcol.com.br_

@BruceAdams có thể đáng để chỉnh sửa câu hỏi để sử dụng on()phương pháp như live()hiện không được chấp nhận và câu hỏi này nhận được khá nhiều khách truy cập.
Rory McCrossan

Câu trả lời:


1637

Để có được nội dung của thuộc tính data-id(như trong <a data-id="123">link</a>), bạn phải sử dụng

$(this).attr("data-id") // will return the string "123"

hoặc .data()(nếu bạn sử dụng jQuery mới hơn> = 1.4.3)

$(this).data("id") // will return the number 123

và phần sau data-phải là chữ thường, ví dụ data-idNumsẽ không hoạt động, nhưng data-idnumsẽ.


7
Tôi đã phải sử dụng attr()vì jQuery đã tước các số 0 hàng đầu từ mã zip bằng cách sử dụng data(), TFM cho biết "Kể từ jQuery 1.4.3 các thuộc tính dữ liệu HTML 5 sẽ được tự động kéo vào đối tượng dữ liệu của jQuery. ... Mọi nỗ lực được thực hiện để chuyển đổi chuỗi thành một giá trị JavaScript (bao gồm booleans, số, đối tượng, mảng và null). Giá trị chỉ được chuyển đổi thành một số nếu làm như vậy không thay đổi đại diện của giá trị. Ví dụ: "1E02" và "100.000" là tương đương dưới dạng số (giá trị số 100) nhưng chuyển đổi chúng sẽ thay đổi biểu diễn của chúng để chúng được để lại dưới dạng chuỗi. "
Wesley Murch

43
Điều này đang trả lại 'không xác định' cho tôi.
Trước

4
Rõ ràng với một số người, tôi nghĩ rằng đáng chú ý đối với những người gặp rắc rối với điều này khi sử dụng .attr () văn bản bên trong ngoặc phải khớp với bất cứ điều gì bạn đã đặt làm thuộc tính dữ liệu tùy chỉnh của mình. tức là Nếu thuộc tính dữ liệu tùy chỉnh là khối lượng dữ liệu , bạn phải tham chiếu nó bằng cách sử dụng .attr ("data-volume") . Và, với jQuery 1.4.3 trở lên và sử dụng .data (), các văn bản bên trong dấu ngoặc phải phù hợp với thuộc tính dữ liệu tùy chỉnh của bạn mà không cần các đĩa dữ liệu tiền tố. tức là Nếu thuộc tính dữ liệu tùy chỉnh là khối lượng dữ liệu , bạn phải tham chiếu nó bằng .data ("âm lượng") .
Lu-ca

111
Đối với những người báo cáo nó không hoạt động, hãy đảm bảo thuộc tính của bạn chỉ chứa các chữ cái viết thường. Ví dụ: "data-listId" phải là "data-listid". Xem stackoverflow.com/questions/10992984/ cấp để biết lý do tại sao.
WindChimes

2
hoặc$(this).data().id //returns 123
Dem Pilafian

170

Nếu chúng tôi muốn truy xuất hoặc cập nhật các thuộc tính này bằng JavaScript gốc, hiện có , thì chúng tôi có thể làm như vậy bằng cách sử dụng các phương thức getAttribution và setAttribution như dưới đây:

Thông qua JavaScript

<div id='strawberry-plant' data-fruit='12'></div>

<script>
// 'Getting' data-attributes using getAttribute
var plant = document.getElementById('strawberry-plant');
var fruitCount = plant.getAttribute('data-fruit'); // fruitCount = '12'

// 'Setting' data-attributes using setAttribute
plant.setAttribute('data-fruit','7'); // Pesky birds
</script>

Thông qua jQuery

// Fetching data
var fruitCount = $(this).data('fruit');
OR 
// If you updated the value, you will need to use below code to fetch new value 
// otherwise above gives the old value which is intially set.
// And also above does not work in ***Firefox***, so use below code to fetch value
var fruitCount = $(this).attr('data-fruit');

// Assigning data
$(this).attr('data-fruit','7');

Đọc tài liệu này


90

Lưu ý quan trọng. Hãy nhớ rằng, nếu bạn điều chỉnh data- thuộc tính động thông qua JavaScript, nó sẽ KHÔNG được phản ánh trong data()hàm jQuery. Bạn phải điều chỉnh nó thông qua data()chức năng là tốt.

<a data-id="123">link</a>

js:

$(this).data("id") // returns 123
$(this).attr("data-id", "321"); //change the attribute
$(this).data("id") // STILL returns 123!!!
$(this).data("id", "321")
$(this).data("id") // NOW we have 321

Điểm hay ... là có dữ liệu (). Làm mới để làm mới dữ liệu từ các thuộc tính?
Harag

1
Đây là một điểm quan trọng để thay đổi và truy cập giá trị thuộc tính dữ liệu một cách linh hoạt.
Motahar Hossain

56

Nếu bạn không quan tâm đến các trình duyệt IE cũ, bạn cũng có thể sử dụng API tập dữ liệu HTML5

HTML

<div id="my-div" data-info="some info here" data-other-info="more info here">My Awesome Div</div>

Mã não

var myDiv = document.querySelector('#my-div');

myDiv.dataset.info // "some info here"
myDiv.dataset.otherInfo // "more info here"

Bản trình diễn: http://html5demos.com/dataset

Danh sách hỗ trợ trình duyệt đầy đủ: http://caniuse.com/#feat=dataset


19

Ngạc nhiên không ai nhắc đến:

<select id="selectVehicle">
     <option value="1" data-year="2011">Mazda</option>
     <option value="2" data-year="2015">Honda</option>
     <option value="3" data-year="2008">Mercedes</option>
     <option value="4" data-year="2005">Toyota</option>
    </select>

$("#selectVehicle").change(function () {
     alert($(this).find(':selected').data("year"));
});

Dưới đây là ví dụ hoạt động: https://jsfiddle.net/ed5axgvk/1/


2
Câu trả lời rất hay. Cảm ơn rất nhiều.
Kiên nhẫn Ruberandinda 6/2/19

13

HTML

<span id="spanTest" data-value="50">test</span>

Mã não

$(this).data().value;

hoặc là

$("span#spanTest").data().value;

ANS: 50

Làm việc cho tôi!




11

Truy cập thuộc tính dữ liệu với riêng nó idlà một chút dễ dàng đối với tôi.

$("#Id").data("attribute");

function myFunction(){
  alert($("#button1").data("sample-id"));
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<button type="button" id="button1" data-sample-id="gotcha!" onclick="myFunction()"> Clickhere </button>


7

Đoạn mã này sẽ trả về giá trị của các thuộc tính dữ liệu, ví dụ: data-id, data-time, data-name, v.v., tôi đã hiển thị cho id

<a href="#" id="click-demo" data-id="a1">Click</a>

js:

$(this).data("id");

// lấy giá trị của id dữ liệu -> a1

$(this).data("id", "a2");

// điều này sẽ thay đổi id dữ liệu -> a2

$(this).data("id");

// lấy giá trị của id dữ liệu -> a2


4

sử dụng jQuery:

  $( ".myClass" ).load(function() {
    var myId = $(this).data("id");
    $('.myClass').attr('id', myId);
  });


0

Tôi có một khoảng. Tôi muốn lấy giá trị của thuộc tính data-txt-lang, được sử dụng được xác định.

$(document).ready(function ()
{
<span class="txt-lang-btn" data-txt-lang="en">EN</span>
alert($('.txt-lang-btn').attr('data-txt-lang'));
});

0

Vấn đề là bạn không chỉ định tùy chọn hoặc tùy chọn được chọn của danh sách thả xuống hoặc danh sách, Dưới đây là một ví dụ cho danh sách thả xuống, tôi giả sử một bản ghi dữ liệu thuộc tính dữ liệu.

$('#select').on('change', function(){
        let element = $("#visiabletoID");
        element.val($(this).find(':selected').data('record'));
    });
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.