jQuery每个错误:未捕获TypeError:不能使用'in'运算符在div中搜索'18'[data-role = page]

Amm*_*han 4 html javascript jquery

我的HTML就像

<div data-role="page" id="Dialog_1" data-url="Dialog_1">...</div>
<div data-role="page" id="Dialog_2" data-url="Dialog_2">...</div>
 .
 .
 .
<div data-role="page" id="Dialog_17" data-url="Dialog_17">...</div>
<div data-role="page" id="Dialog_18" data-url="Dialog_18">...</div>
Run Code Online (Sandbox Code Playgroud)

我想通过$ .each选择所有data-role ="page"

我的jQuery

$.each("div[data-role=page]", function (){
   console.log($(this).attr('id'));
});
Run Code Online (Sandbox Code Playgroud)

它给出了错误:

Uncaught TypeError: Cannot use 'in' operator to search for '18' in div[data-role=page]
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/8xUy3/

Cer*_*rus 16

你需要提供一个jQuery集合,而不仅仅是一个选择器$.each():

$.each($("div[data-role=page]"), function (){
    console.log(this.id);
});
Run Code Online (Sandbox Code Playgroud)

或者,甚至更好:

$("div[data-role=page]").each(function (){
    console.log(this.id);
});
Run Code Online (Sandbox Code Playgroud)

请注意我替换$(this).attr('id')this.id.它获得完全相同的属性,但它的效率更高.

小提琴示例

  • 作为进一步的优化,使用`this.id`而不是`$(this).attr('id')` (2认同)

Jas*_*n P 9

你的代码无法工作的关键原因是因为你试图迭代一个字符串,这不是你真正想要做的.

要迭代jQuery集合,请尝试另一种形式.each():

$("div[data-role=page]").each(function() {
    //...
});
Run Code Online (Sandbox Code Playgroud)

$.each() 是(通常)数组或普通对象.