jQuery eq()超出范围

时间:2014-05-07 19:53:40

标签: javascript jquery

我是jQuery的新手,我有以下误解。

<p>adasd</p>
<p>42323123</p>
...
$("p").eq(4).html("some html")

我知道我的HTML中只有两个<p>所以我确实希望控制台会说我一个例外,或者会发出一些信号告诉我我做错了什么。

console.log($("p").eq(4))

打印:

prevObject: jQuery.fn.init[2], context: document, jquery: "2.1.1", constructor: function, selector:...

为什么这样工作?

4 个答案:

答案 0 :(得分:3)

由于jQuery .eq()函数的documentation page状态:

  

如果在指定的从零开始的索引处找不到元素,则该方法构造一个具有空集和长度属性为0的新jQuery对象。

如果您想检查$("p").eq(4)是否已成功找到元素,您可以执行以下操作:

var paragraphFive = $("p").eq(4);

if (paragraphFive.length) {
  // It exists
}
else {
  // It doesn't
}

答案 1 :(得分:1)

无论选择器是否匹配任何元素,此(以及许多其他选择器)将始终返回jQuery对象。在没有元素匹配的情况下,返回的jQuery对象将包含零元素;您可以使用.length

进行测试
console.log($("p").eq(4).length) // 0

答案 2 :(得分:0)

创建了此JsFiddle

HTML:

<p>first</p>
<p>second</p>    

脚本:

$(document).ready(function(){
    window.console&&console.log($("p").length);
});

这将记录'2'。在阅读之前,您始终可以检查阵列中是否有4个元素。这是任何编程语言BTW的好习惯......

答案 3 :(得分:0)

这是因为没有第四个要素返回。 jQuery为您的选择返回一个空集。

尝试:

var el;
(el = $('p').eq(4)).length != 0 ?
  el.html('some html') :
  console.log('did nothing');

http://jsbin.com/dizem/1/edit