使用jquery获取解析后的html结果集中的元素索引

时间:2012-01-17 20:28:42

标签: jquery

似乎

$(html).find('*').index('#theID');

产生-1而

$(html).find('*').each(function(ind){if(this.id=='theID') alert('found! @'+ind) } );

确实有效(警告229)

我使用 Windows 7 IE 8 jquery 1.6.1

我的问题是,为什么第一个不起作用?感谢。

2 个答案:

答案 0 :(得分:3)

查看index的jQuery文档。字符串参数的API如下(添加了斜体强调):

  

selector 表示要查看的jQuery集合的选择器   对于元素

     

...

     

如果选择器字符串作为参数传递,则.index()返回一个整数,指示原始元素相对于选择器匹配的元素的位置。如果找不到该元素,.index()将返回-1。

要执行您要执行的操作,您需要传递元素(或jQuery对象)作为参数,而不是字符串。因此,这样的事情应该做你想做的事情:

<德尔> $(html).find("*").index($("#theID", html));

修改(见评论)

由于html是一个字符串,因此从该字符串创建2个不同的jQuery对象会导致问题。要解决这个问题,你可以将它传递给jQuery一次:

var $html = $(html);
$html.find("*").index($html.find("#theID"));

index形式的文档说明如下:

  

元素 jQuery对象中的DOM元素或第一个元素   寻找。

     

...

     

如果在元素集合和DOM元素上调用.index()或   传入jQuery对象,.index()返回一个指示的整数   传递的元素相对于原始集合的位置。

答案 1 :(得分:0)

当您调用index方法在匹配的DOM元素集上传递selector时,它会查找对象匹配元素中的第一个元素,该元素也匹配此选择器并返回其索引。 / p>

大多数情况下thisID不是$(html).find('*')集合中的第一个元素,这就是您获得-1的原因。

在下面的工作演示中,我将theID作为正文中的第一个元素,我将索引作为0

var html = $('body');
alert($(html).find('*').index('#theID'));//Returns 0 index

正在使用 Demo