2012-01-17 27 views
1

看來使用jQuery得到元素的索引中解析的HTML結果集

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

收益率-1而

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

不工作(報警229)

我使用Windows 7 with IE 8 and jquery 1.6.1

我的問題是,爲什麼不第一個工作?謝謝。

+0

你不使用IE9的原因嗎? – Jasper

+0

@Jasper:nopers – user420667

+0

我建議您嘗試一下,它支持一些CSS3規範,它的JavaScript引擎速度非常快。 – Jasper

回答

3

查看index的jQuery文檔。用於字符串參數的API如下(斜體強調):

選擇表示一個jQuery集合在其中看 用於元件的選擇器。

...

如果選擇字符串被作爲參數傳遞,的.index()返回一個整數,指示原始相對於由選擇器相匹配的元素元件的位置。如果找不到元素,則.index()將返回-1。

要做你想做的事情,需要傳遞一個元素(或jQuery對象)作爲參數,而不是字符串。因此,這樣的事情應該做你想要什麼:

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

編輯(見註釋)

由於html是一個字符串,從字符串創建2個不同的jQuery對象是要造成問題。爲了解決這個問題,你可以將它傳遞到jQuery的一次:

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

的文檔,這種形式的index狀態如下:

元素內的DOM元素或第一元素jQuery對象爲 找。

...

如果的.index()被調用上的元件的集合和一個DOM元素或 jQuery對象中傳遞,的.index()返回一個整數,指示傳遞的 位置元素相對於原始集合。

+0

由於'html'是一個字符串,它將創建兩個不同的樹。您創建搜索的'''ID'元素不會與實際遍歷的樹中的元素相同。 – Dennis

+0

@丹尼斯 - 這是一個很好的觀點。我從來沒有考慮過。謝謝。 –

+0

很好,後面的代碼示例有效。我有一個奇怪的想法,即.index(選擇器)在元素集上使用了選擇器。我是多麼的害羞。 :-P。我認爲有一個輕微的錯字,它應該是var html,而不是var $ html。 – user420667

0

當你調用index方法上一套匹配它查找對象的匹配元素中的第一個元素也該選擇相匹配,並且位於返回其索引DOM元素傳遞selector

絕大多數與thisID不是$(html).find('*')集合中的第一個元素,這就是爲什麼你得到-1

在下面的工作演示中,我將theID作爲正文中的第一個元素,我將索引作爲0

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

工作Demo