jquery:为什么我只能得到第一个数据属性?

rls*_*saj 4 jquery

我有以下jQuery:

var status = $('meta').data('status'), 
    id = $('meta').data('id'), 
    details = $('meta').data('details');           
    console.log(status, id, details);
Run Code Online (Sandbox Code Playgroud)

和以下HTML,

<head>
    <meta data-status="stopped" > 
    <meta data-id="0001" >
    <meta data-details="Example details" >
Run Code Online (Sandbox Code Playgroud)

并且只有status变量打印到控制台,id并且details变量打印为"未定义".但是,如果我将元标记重新排列为:

<head>
        <meta data-id="0001" >
        <meta data-status="stopped" > 
        <meta data-details="Example details" >
Run Code Online (Sandbox Code Playgroud)

然后只有id变量将打印到控制台.

我错过了什么?

Yel*_*yev 9

$('meta')返回包含所有三个meta元素的类似jQuery数组的对象.
$('meta').data('status')返回第一个元素的data-status属性值,它可以正常工作. 但是,也尝试读取第一个元素的数据属性,但没有.
$('meta').data('id')id

您需要将所有数据属性合并到一个元组中.

<meta data-status="stopped" data-id="0001" data-details="Example details"/> 
Run Code Online (Sandbox Code Playgroud)

这样,你可以这样做(假设它是meta你文档中的第一个标签)

var status = $('meta').data('status'), 
    id = $('meta').data('id'), 
    details = $('meta').data('details');   
Run Code Online (Sandbox Code Playgroud)

另一种方法是在选择器中使用属性:

<meta data-status="stopped" > 
<meta data-id="0001" >
<meta data-details="Example details" >

var status = $('meta[data-status]').data('status'), 
    id = $('meta[data-id]').data('id'), 
    details = $('meta[data-details]').data('details');  
Run Code Online (Sandbox Code Playgroud)


Pra*_*lan 5

data()方法返回指定数据存储中的值,用于匹配元素集中的第一个元素,因此它总是尝试从第一个元素获取data-*值,并且未定义.

使用具有属性选择器来获取具有特定data-*属性的元标记.

var status = $('meta[data-status]').data('status'),
  id = $('meta[data-id]').data('id'),
  details = $('meta[data-details]').data('details');
console.log(status, id, details)
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<meta data-status="stopped">
<meta data-id="0001">
<meta data-details="Example details">
Run Code Online (Sandbox Code Playgroud)