2010-06-25 86 views
0

我有那種有一個mouseover事件中綁定列表:我怎樣才能得到另一個祖先的祖先指數?

myObject = function() 
{ 

    this.listTemplate = $("<ul></ul>") 
     .mouseover(function(event) { 
      //Do mouse over stuff 
     }) 
     .click(function(event) { 
      //Do click stuff 
     }); 

    //...more stuff 
} 

在我的代碼後來,我填充這個名單由Ajax調用返回的項目,這是所有工作順順當當...

在阿賈克斯的成功方法:

//... 
$(items).each(function(item) { 
    $("<li />").append("<a />").text(item.value) 
    .appendTo(templateList); 
}); 
//... 

在我mouseover情況下,event.target返回預期錨定,但我需要的li祖先的索引(內ul)我徘徊了。

鑑於li的內容可能比只有錨點更復雜,jQuery是否提供了一種簡單的方法來查找?

即我懸停的li[0]li[4]等一些後代......

回答

1

您可以使用.index(),像這樣:

.mouseover(function(e) { 
    var i = $(e.target).closest('ul').children().index($(e.target).closest('li')); 
}) 

從文檔:

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

這上升到<ul>,得到它的子項(<li>元素),並得到<li>包含該集合中的鏈接索引。


或者,而不是使用event.target你可以多一點乾淨地.delegate()做到這一點,就像這樣:

$("&lt;ul&gt;&lt;/ul&gt;").delegate('li', 'mouseover', function() { 
    var index = $(this).index(); 
}) 

在這種情況下,this<li>所以正常.index()呼叫只會越來越它是相對於它的兄弟姐妹的索引,如果它是一個選項...這是一個更簡單的路線。


末,那種切的問題,你不需要編碼<>,你可以有:

$("<li />").append("<a />").text(item.value) 

如果你這樣做是對XHTML /驗證目的,just wrap your script in CDATA to validate correctly

+0

我不知道爲什麼我認爲我必須編碼這些...你過去了嗎?無論如何,現在修好了,謝謝。 – BenAlabaster 2010-06-25 22:51:35

+0

@BenAlabaster - 它應該......其他東西如果不起作用,可能會驗證您的網頁,看看有什麼東西不匹配......這甚至不是我能記得看到的問題:) – 2010-06-25 22:53:22

+0

+1謝謝,那只是票。這是最後一件事,防止我的對象工作,因爲我想它;) – BenAlabaster 2010-06-25 22:58:07