2010-03-08 144 views
2

Internet Explorer不喜歡我的Jquery選擇器。不知道是我的弱Jquery 技能還是一般的Explorer奇怪。Jquery Selector不能在Internet Explorer上工作

這裏是代碼:

$("#field_"+index+" #field_Label").val(); 

[DIV field_1]

<input id="field_Label" //... you get the picture. 

解釋這個..我有一個DIV標記field_1,field_2。等等。 Internet Explorer的出現找到第一個迭代,但不能 找到第二個。

謝謝大家,感謝你的stackoverflow。

有沒有更好的辦法,我應該做的..

下面是一個更完整的片段:?

<li id="blank"> 
<div id="field_1" style="background: #BDCFFF; color: #1028BD;margin: 10px; border: 1px solid black;width: 400px; height: 100px;"> 
<table> 
<tr><td>Label:</td><td><input class="field_Label" id="field_Label" type="text"/></td></tr> 
<tr><td>Type:</td><td><input id="field_Type" type="text" value="2"/></td></tr> 
<tr><td>Id:</td><td><input id="idField" type="text" value="0"/></td></tr> 
</table> 

</div> 
+5

你不是想爲多個元素使用相同的「id」值,對嗎?因爲那不行;它有點違背「id」的定義,它必須在頁面上全球唯一。 – Pointy 2010-03-08 20:46:30

+0

這是爲什麼在社區維基下? – 2010-03-08 20:51:23

+0

是啊..我知道它的奇怪..它在Safari和Firefox上工作..我不知道什麼是..我可以切換到類和ID的我猜..我真的想說的是給我帶有此ID的標籤,位於此DIV的旁邊。 – user284503 2010-03-08 21:00:37

回答

1

變化#field_Label到.field_Label,然後訪問

$("#field_"+index+".field_Label").val(); 

沒有空格beween的值,所以輸出將是#field_1.field_Label - (即喜歡具體情況)

+0

奇怪..我試過..把標籤改成了班..然後回來 ..還是很奇怪。 alert($(「#field_1.field_Label」)。val()); user284503 2010-03-08 21:11:29

+0

我不確定這是否有幫助,但您可能需要鑽取一點,(#field_1,table,.field_label )或其他東西,因爲表格可能會對IE中的DOM結構產生有趣的影響。 無論哪種方式,如果您只是將類名稱添加爲class ='field_1_Label'等,您將能夠直接訪問它們,不應該這樣做更難 – 2010-03-09 01:38:10

2

分隔每個選擇用逗號:

$("#field_" + index + ", #field_Label")........... 
+0

我不認爲這就是他的追求。我懷疑他的印象是「id」值在父元素的範圍之內。那是不正確的。 (當然,你的答案沒有錯,但我認爲它不適用。) – Pointy 2010-03-08 20:51:46

+0

@Pointy:不太確定,但看着他的問題,這是我能夠理解的。謝謝 – Sarfraz 2010-03-08 20:54:03

+0

好吧,也許這將有助於** **至少:-) – Pointy 2010-03-08 20:56:37

0

你應該給你的div一個類並做

var inputvals = $('.class_name').val(); 

然後你可以做他們想要的作爲一個整體,你不必逗號分開一堆ID

+0

我正試圖將它們分開,因爲我將它們中的每一個都推到了Forloop中的一個對象上..我試圖避免這種情況..但可能必須最終使用.each,它們都是單獨的。 – user284503 2010-03-08 21:12:35

3

嘗試使用輸入,而不是id的類。只有一個輸入應該有id field_Label。

<input class="field_Label" /> 
selector: $("#field_"+index+" .field_Label").val(); 

這是考慮您添加的代碼段的更新。我重寫了它將id改爲class。

<div id="field_1"> 
<table> 
<tr><td>Label:</td><td><input class="field_Label" type="text"/></td></tr> 
<tr><td>Type:</td><td><input class="field_Type" type="text" value="2"/></td></tr> 
<tr><td>Id:</td><td><input class="idField" type="text" value="0"/></td></tr> 
</table> 
</div> 

Selectors: 
var label = $("#field_1 .field_Label").val(); 
var type = $("#field_1 .field_Type").val(); 
var id = $("#field_1 .idField").val(); 

如果要使用相同輸入類型的許多表,請使用類而不是id。否則,如果輸入是唯一隻使用ID,例如:選擇:$( 「#idField」)VAL()

+0

謝謝..我會檢查出來。 – user284503 2010-03-08 21:01:13

2

謝謝大家的幫助..我終於解決這個..這只是奇怪,因爲 它似乎只會導致Internet資源管理器..但這是我所做的 讓它工作。

$("#field_"+index).find("#field_Label").val(); 

/*萬歲StackOverflow !! */

0

感謝大家的幫助。我沒有 最終解決這個..這只是 奇怪,因爲它只是似乎導致 與Internet Explorer的問題..但 這是我做的到讓它工作。

$(「#field _」+ index).find(「#field_Label」)。val();

/*萬歲StackOverflow !! */

您節省了我幾個小時的時間。謝謝!!! IE是魔鬼

0
Thanks everyone for the help.. I did finally resolve this.. it was just 

奇怪,因爲它只是似乎導致 與Internet Explorer的問題..但 這是我做過什麼得到它的工作。

$("#field_"+index).find("#field_Label").val(); 

/* Long live StackOverflow !! */ 

正如其他人指出,最內.find()是沒有必要的和過於冗餘。

基本上,ID是使用jQuery的Sizzle選擇器引擎進行選擇的禁食方法。使用唯一的ID,選擇是最快的方法。從另一個ID降序標識只會增加不必要的附加計算。你很可能不會遇到任何性能下降,但這不是一個好習慣。

這是你應該做訪問該元素是什麼:

$("#field_label").val(); 

來源: http://www.artzstudio.com/2009/04/jquery-performance-rules/

0

好了,事實證明FIELD_LABEL應該是我所看到的一類,而不是一個ID旁你的樣本;如果你真的需要有兩個派生id選擇器,你可以使用find()。

因此,而不是:

$("#field_" + index + " #field_Label") 

您可以使用此:

$("#field_" + index).find("#field_Label") 

這在IE工作正常。

相關問題