2010-12-15 100 views
0

好吧,這是一個奇怪的請求,但我需要使用jQuery來操縱一堆標籤,它們都具有相同的id和名稱。重複標籤的jQuery處理

我們使用Izenda AdHoc報告控件,它具有查詢設計器GUI。它爲您提供了一個選擇下拉列表以及其中的表格列表,您可以單擊一個按鈕並獲取另一個,另一個以及另一個等來構建您的查詢。

每當你點擊一個新表時,它會回發給服務器,並返回表中的一個新行,其控制與上面的行相同,包括一個相同的選擇標記,具有相同的ID和名稱屬性。 ASP.NET如何產生這個超出了我的想象。

但我使用jQuery來修改下拉列表的長度,因爲它們太短。奇怪的是,儘管它們都具有相同的ID,使用jQuery,如:

jQuery("#ctl00_ContentPlaceHolder1_queryBuilder_ctl101_jtc_Table").width(250); 

只會更改第一個下拉列表。我需要擴大他們,但他們都有相同的ID。還有很多其他的選擇標籤我想要觸摸不要

任何想法?

編輯: 現在我想到了,我不知道這是如何工作的。該頁面回傳,保存數據源等一切似乎工作,但我不知道ASP.NET如何告訴從另一個下拉列表。但它確實有效。

+3

HTML ID的應該永遠是唯一的。您始終可以使用一個類標記多個相關元素,但重複使用腳本的id問題。 當然,當你不控制代碼...這是另一回事。也許你可以使用jQuery爲添加的元素分配新的,唯一的ID? – 2010-12-15 21:40:46

+0

我同意你的意見。但在這種情況下,我們有一個顯然是錯誤的第三方控制,我們無法控制。 – LoveMeSomeCode 2010-12-15 21:42:31

+0

你能爲此發佈一些標記嗎?也許你可以選擇父母(除非他們的ID也是非唯一的......),然後遍歷你需要的孩子。 – jwiscarson 2010-12-15 21:56:37

回答

2

$("#yourid")只會匹配第一個(因爲當然,所有的ID都應該是唯一的)。

如果您不能擁有唯一的ID,那麼可以使用attribute equals selector $("input[id='yourid']");來訪問它們。這將返回所有匹配的元素。

看到它的工作:http://jsfiddle.net/jonathon/22mpK/

+0

真棒,謝謝!我認爲這個屬性等於thing並不打算與id一起使用,因爲我們應該有唯一的id,但是它似乎像任何其他屬性一樣工作。很棒! – LoveMeSomeCode 2010-12-16 14:02:21

1

您需要通過其他選擇器訪問它們。由於JavaScript規範要求唯一的ID,所以jQuery只會對第一個匹配的唯一ID起作用。如果DOM中有更高級別的類,並且可以通過某些與DOM相關的路徑持續到達元素,那麼您可能希望以這種方式攻擊您的問題。 如每個表都呈現在「whateverClass」類的div中,並且使用$('.whateverClas table').width(250); 我必須做一些測試,但我能想到的唯一的其他解決方案是做一個循環的$("#ELEM").not(".classed").addClass("classed");來給每個重複的ID一個可選課程..?

0

這不是很奇怪了jQuery只調整您的選擇之一。

DOM ID應該是唯一的跨頁,即使瀏覽器不抱怨太多了,在javascript通過ID選擇元素只會給你隨機的結果,如果多個元素具有相同的ID。

你應該嘗試通過它們的元素名稱和位置在頁面中選擇表格。

for instance let's imagine your tables are inside the 3rd div in the page : 
jQuery('div:eq(2)>table').width(250); 

你應該看看所有的api.jquery.com可用的結構選擇,並且不使用ID建立一個結構選擇。

我希望這將有助於你

傑羅姆·瓦格納