如何正确访问 HTML 元素的数据属性?

How do I properly access the data-attribute of an HTML element?

我试图让星期几出现在我的 H2 元素中,但控制台显示 "cannot read property of fday undefined" 下面是我试图附加到的 HTML 元素和我的 JS我习惯这样做

<div class="flex-container col-xs-6" id="weekDay">
    <h2 data-fday="1"></h2>
    <h2 data-fday="2"></h2>
    <h2 data-fday="3"></h2>
    <h2 data-fday="4"></h2>
    <h2 data-fday="5"></h2>
</div>

for (var i = 0; i < 6; i++) { //Begin loop - loop over the object's next 5 days
    const weekly_forecast = data.daily.data;
    let today = moment().format('D MMM, YYYY');//Format the date in the form Day / Month / Year from moment.js library
    const weekday = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];

    $('#day_'+[i]).append("<h3>"+weekly_forecast[i].apparentTemperatureMax + "<br></h3><P>" + weekly_forecast[i].summary + "</p>"); //append a <h2> within that div containing the day and <p> containing the high and low temperature for the day
        //Get the day of the week...
    let a = new Date(today); //parse current date
    let nextDay = weekday[a.getDay()+i]; //(get the day of the week)
    const dayData = $("#weekDay > h2").dataset.fday; //accessthe data-attribute of each H2 within #weekday
    if (dayData = [i]) {    //if the data attribute of the H2 element === i
        $(this).append(nextDay);    //append the current day of the week in the H2
    }

    console.log(nextDay);

}

dataset 不是 jQuery 对象 属性,它是 dom 元素 属性。

您还需要在循环中定位正确的元素索引

尝试改变

$("#weekDay > h2").dataset.fday

$("#weekDay > h2").eq(i).data('fday');

或作为 dom 节点访问 属性

$("#weekDay > h2")[i].dataset.fday

使用 PURE JS 有两种方法。使用数据集或使用 getAttribute 方法。

var test = document.getElementsByTagName('li');
console.log(test[1].dataset.id);
var dataText = test[0].dataset.id + " " + test[1].dataset.id;
document.getElementById('target').innerHTML = dataText;


var dataTextAnotherApproach = test[1].getAttribute('data-id');
document.getElementById('target2').innerHTML = dataTextAnotherApproach;
<div id="test">
  <ul>
    <li data-id="data 1">Hello</li>
    <li data-id="data 2">Hello 2</li>
  </ul>
</div>
<div id="target"></div>
<div id="target2"></div>