似乎
$(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
我的问题是,为什么第一个不起作用?感谢。
答案 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