2009-06-27 65 views
7

如果我有兩個div,id =「myDiv」重複id的擰jQuery選擇器?

$("#myDiv").fadeOut();會淡出兩個div嗎?或者它會褪色只有第一/秒?或根本沒有?

如何更改它淡出哪一個?

注:我知道重複的ID是違反標準,但我使用fancybox模式彈出窗口,它複製了頁面上指定內容的彈出窗口的內容。如果有人知道解決方法(也許我使用fancybox錯誤),請讓我知道。

+1

你試過了嗎? – 2009-06-27 23:58:21

+0

是的,但我希望如果我問別人他們可能會給我一個解釋,爲什麼只有第一個被淡出。 – Matt 2009-06-28 00:33:41

+0

它重複嗎?或將內容「移動」到彈出窗口位置? – scunliffe 2009-06-28 02:43:07

回答

6

jQuery在查詢ID時恰好匹配一個元素。一個最多有一個Element對象的數組將返回$("#foo").get()。有關更多信息,請參閱jQuery documentation,或自行嘗試。

$(function() { 
    alert($("#foo").length); 
}); 
11

元素ID應該是唯一的。具有相同ID的多個DIV將是不正確且不可預知的,並且違背該ID的目的。如果你這樣做:

$('.myDiv').fadeOut(); 

這將淡化他們兩個了,假設你給他們一個班myDiv和唯一ID(或沒有)的。 「

7

」注意:我知道重複的ID是違反標準的「

然後不要這樣做。你已經弄清楚了兩個問題。它違反了標準,並且干擾了jQuery(實際上是常規的DOM)選擇機制。未來可能會有更多問題。

很可能,你使用fancybox錯誤,在這種情況下,我希望有人熟悉它可以幫助你。或者更糟的是,如果腳本本身有缺陷,則不應該使用它。

0

我遇到了同樣的問題。很顯然,當您在打開Fancybox的頁面上創建內容時,它會創建原始內容的鏡像div。在我的情況下,控制被包裹在那的fancybox創建了一個名爲「fancy_div」

我能夠選擇的控制,並獲得它的使用以下格式選擇值DIV:

$(」 #fancy_div [id = InputText]')。val();

您的控件可能存在於Fancybox的其他地方。最好的辦法是看看viewsource,但這很棘手。

要進入查看源代碼,使用以下技術: 將這個標籤您的形式: 獲得價值 打開表單,點擊標籤,打開警報窗口。
確保您的光標在頁面內容中(找到控件並單擊)。
右鍵單擊控件並選擇「查看源代碼」。
存在一堆div,因此請查找包含您的內容的div。

希望這會有所幫助。

1

因爲$(「#myDiv」)將只與ID返回第一個div,你必須找到使用這種伎倆,ID的所有元素:

$('[id=myDiv]'); 

因此,對於你的情況,在淡出適用於所有這些div的:

$('[id=myDiv]').fadeOut(); 

如果你想確保你的頁面沒有這個ID兩次,然後你可以這樣做,刪除多餘的:

$('[id=myDiv]:gt(0)').remove(); 
1

你也可以使用find()的路線。發現將返回所有的元素與ID,並且可以將範圍限制在一個特定的父母,如果需要嘗試像$(document).find('#myDiv').fadeOut();

$('.parentElement').find('#myDiv').fadeOut(); 
0

我最近有一個類似的問題。我有一個頁面通過Ajax加載顯示不同的內容。有一個按鈕會觸發服務器生成PDF圖像。

我原來的解決方案是使用類選擇器,它運行良好,但與其他開發人員發生摩擦。鏈接中已經有很多類,使用類作爲標識符使代碼變得醜陋。所以我用了一個名字屬性:

<a name="printButton".... 

$('a[name="printButton"]').on('click',function(){.... 

工作只是丹迪!