data-id属性を取得するにはどうすればよいですか?


813

私はjQuery流砂プラグインを使用しています。クリックしたアイテムのデータIDを取得して、それをWebサービスに渡す必要があります。data-id属性を取得するにはどうすればよいですか?この.on()メソッドを使用して、並べ替えられたアイテムのクリックイベントを再バインドしています。

$("#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
新規訪問者への通知:JQueryの.live()メソッドは.on()に代わり非推奨になりました
dendini

3
アラートから#を削除する必要がありますが、必要はありません:-)
Becs Carter

attr( "#data-id"))は間違っています。修正:attr( "data-id"));
guido _nhcol.com.br_ 2017年

@BruceAdams 現在非推奨となっているon()メソッドを使用するために質問を編集する価値があるかもしれlive()ません、そしてこの質問はかなり多くの訪問者を取得します。
Rory McCrossan、2018年

回答:


1637

data-id(のように<a data-id="123">link</a>)属性の内容を取得するには、使用する必要があります

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

または.data()(新しいjQuery> = 1.4.3を使用する場合)

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

そして、後の部分data-は小文字でなければなりません。例えばdata-idNum、機能しませんが機能しdata-idnumます。


7
attr()jQueryがを使用して郵便番号から先行ゼロを取り除いていたため、私は使用する必要がありました。TFMはdata()「jQuery 1.4.3 HTML 5データ以降、属性はjQueryのデータオブジェクトに自動的に取り込まれます。...文字列を変換するすべての試みが行われます。 JavaScript値(ブール値、数値、オブジェクト、配列、nullを含む)に変換されます。値が数値に変換されるのは、変換によって値の表現が変更されない場合のみです。たとえば、「1E02」と「100.000」は同等です数値(数値100)として変換されますが、変換すると表現が変更され、文字列のままになります。 "
Wesley Murch

43
これは「未定義」を返します。
Foreever 2014

4
一部の人には自明ですが、.attr()を使用する場合、角かっこ内のテキストは、カスタムデータ属性として設定したものと一致する必要があるという点で、これに問題があった人には注目に値すると思います。つまり、カスタムデータ属性がdata-volumeの場合、.attr( "data-volume")を使用して参照する必要があります。そして、jQueryの1.4.3上向きと.dataセクションを使用して()で、括弧内のテキストは、カスタムデータ属性と一致する必要がありますすることなく、データ-接頭辞。つまり、カスタムデータ属性がdata-volumeの場合、.data( "volume")を使用して参照する必要があります。
ルーク、

111
機能しないと報告する人は、属性に小文字のみが含まれていることを確認してください。たとえば、「data-listId」は「data-listid」である必要があります。理由については、stackoverflow.com / questions / 10992984 /…をご覧ください。
WindChimes 2014年

2
または$(this).data().id //returns 123
Dem Pilafian、2015年

170

既存のネイティブJavaScriptを使用してこれらの属性を取得または更新する場合は、次に示すようにgetAttributeメソッドとsetAttributeメソッドを使用して実行できます。

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>

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');

このドキュメントを読む


90

重要な注意点。JavaScriptを介して動的にdata- 属性を調整した場合、data()jQuery関数には反映されないことに注意してください。data()関数を使用して調整する必要もあります。

<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

良い点は...属性からデータを更新するためのdata()。refreshはありますか?
Harag

1
これは、データ属性値を動的に変更してアクセスするための重要なポイントです。
Motahar Hossain

56

古いIEブラウザーが気にならない場合は、HTML5データセットAPIを使用することもできます

HTML

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

JS

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

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

デモ:http : //html5demos.com/dataset

完全なブラウザサポートリスト:http : //caniuse.com/#feat=dataset


19

誰も言及されていないことに驚いた:

<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"));
});

これが実際の例です:https : //jsfiddle.net/ed5axgvk/1/


2
とてもいい答えです。どうもありがとう。
Ruberandinda Patience

13

HTML

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

JS

$(this).data().value;

または

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

ANS:50

私のために働く!


11

$ .dataを使用しています-http : //api.jquery.com/jquery.data/

//Set value 7 to data-id 
$.data(this, 'id', 7);

//Get value from data-id
alert( $(this).data("id") ); // => outputs 7


11

独自のデータ属性へのアクセスidは、私にとっては少し簡単です。

$("#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

このコードは、データ属性の値を返します。例:データID、データ時間、データ名など。IDについては、

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

js:

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

// data-idの値を取得します-> a1

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

//これはデータIDを変更します-> a2

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

// data-idの値を取得します-> a2




0

スパンがあります。定義に使用されている属性data-txt-langの値を取得したい。

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

0

問題は、ドロップダウンまたはリストのオプションまたは選択したオプションを指定していないことです。これはドロップダウンの例です。データ属性data-recordを想定しています。

$('#select').on('change', function(){
        let element = $("#visiabletoID");
        element.val($(this).find(':selected').data('record'));
    });
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.