2013-12-10 48 views
3

我有共同的jQuery功能和兩個div標籤。這兩個div標籤有不同的名稱,但都包含相同ID的元素,現在我想爲他們使用這個常見的JQuery功能? 我已經實現了常用功能,但它不適用於兩者。如何使用常見的js函數來創建兩個相同id的div元素?

這裏是鏈接到我的jsfiddle -jsfiddle.net/xS7zF/1/

在我的jsfiddle有兩個div標籤即示例1和示例2和兩個標籤具有相同ID的元素。函數對第一個div的工作正常,但對第二個工作不正常。

請幫我解決這個問題。

+0

代替__id__使用__class__否則只有第一項將被選中 –

回答

3

呀,引擎蓋下,jQuery的上一個選擇ID將使用由瀏覽器實現的Document.GetElementById()函數,該函數非常快速,但是(我猜取決於瀏覽器)在找到第一個元素之後會停止,因爲ID應該是唯一的,並且不需要進一步搜索第一個被發現。

例如,將id =「eb」的div重命名爲class =「eb」,並且仍然可以使用$(「#example1 .eb」)和$(「#example2 .eb」)

UPDATE: 使用新的小提琴我創造了這個:http://jsfiddle.net/xS7zF/5/

我清理了大量的代碼,並希望你能看到我做了什麼。我改變了從id到class兩次出現的所有元素。現在,當您使用$(".classname").click()將事件附加到元素時,它會附加到所有元素。在你設置HTML的處理程序函數中,你可以使用它的ID來定位一個特定的元素,但是你發現它是相對於執行事件的元素的。您可以使用parent(),parentsUntil(),next(),find()等來完成此操作。查看jQuery文檔以瞭解所有可能性。因此,例如,change-handler附加到名稱= Assets的所有輸入。但是,不要使用$(「#b1」)。show(),而是使用$(this).parent()觸發特定輸入的父項。然後,我找到一個class =「。b1」的元素,它只會找到這個特定輸入旁邊的元素,並將HTML設置爲該元素。

由於還有其他輸入,當輸入發生變化時會發生相同的操作,但它會發現IT的父項,並找到IT旁邊的class =「。b1」的元素。因此,包含輸入的兩個div都包含在內,因爲它們相對於自身而不是文檔上的元素進行操作。

爲了獲得更多樂趣,並向您展示這種編程方式是多麼靈活,這裏有一個Javascript代碼不變的小提琴,但是它有8次完全相同的問題div。不管你重複多少次,相同的代碼將作用於你創建的儘可能多的div,因爲一切都是相對的。 http://jsfiddle.net/xS7zF/7/

希望這會有所幫助,其餘的由您決定!

+0

沒有得到你的觀點你可以在小提琴中實現它 –

+0

我很樂意,但你有一個令人難以置信的大提琴,看起來它幾乎是你的整個應用程序,我需要通過所有你的代碼。如果你可以把它縮小到基本的我可以看看... –

+0

在這裏,我直接指導基本的小提琴查詢。 http://jsfiddle.net/xS7zF/2/ –

3

ID必須是唯一的,你不應該重複它們。您可以用class替換id,並在jQuery函數中使用(".ub").each()或使用eq(x)手動引用該對象。例如(".ub").eq(1).

+0

我將嘗試這一點,但不是在的jsfiddle正常工作,它可以詳細闡述,或提高我的jsfiddle如果可能的話 –

0

你不應該分配相同的id到不同的元素。 你CAN但你不應該。而不是提供相同的ID,使用類別

0

ID必須是唯一的,請嘗試修復此問題,更改爲類。 你可以嘗試這樣的事情:的

$("div div:first-child") 

代替

$("#eb") 

但是取決於你的頁面代碼的其餘部分的。所以,首先轉換到類和使用

$(".eb") 
+0

可以請你實現對JS-FIDLE相同的代碼:的jsfiddle。 net/xS7zF/1 /如果可能的話 –

相關問題