2012-09-26 34 views
2

我使用jQuery 1.7.1,並沒有其他的JS庫/框架。我可以選擇大多數元素,除了一個特殊的表格給我帶來麻煩外。這發生在Firefox和Chrome中。jQuery不抓取基於ID選擇器的元素

這裏是一個描述這一切的圖像:

Chrome JavaScript console

此圖像中的順序步驟:

  1. 我選擇的所有表的頁面
  2. 我上選擇一個不同於我想要的表
  3. 我將該表設置爲「display:none」(只是爲了說明jQuery不關心「di splay:none「)
  4. 我再次選擇該表格,現在它已被隱藏。一切皆好。
  5. 然後我嘗試選擇我真正想要的表格。我沒有得到任何回報。
  6. 我使用表的初始數組來分配我想要一個變量的表。
  7. jQuery返回該表就好了,它現在在變量「theTableIWant」中。
  8. 表中的「id」與我在步驟#5中選擇的完全相同的「id」完全沒有用。

爲什麼jQuery不會把表交給我?爲何會發生這種情況?

回答

3

它不起作用,因爲#是jQuery選擇一個特殊字符的ID,所以你得到這個錯誤:Syntax error, unrecognized expression: #office_set-###

如果你真的有在ID使用###(我不會推薦它的原因太貼),你可以逃脫它的選擇是這樣的:

​$('#office_set-\\#\\#\\#') 

示例 - http://jsfiddle.net/infernalbadger/fpcME/

你必須加倍逃避,你實際上是想通過\到jQuery選擇器引擎。

+0

請注意,您必須使用\轉義選擇器語法,然後您必須使用另一個\來轉義JavaScript字符串語法。 – Quentin

+0

這實際上工作,謝謝! – JoeLinux

0

1)確保步驟5中的表格選擇器正確。也許有多個具有相同ID的元素。

2)當你將一個JQuery元素分配給一個變量時,你不能像這樣調用原始DOM屬性。嘗試:

theTableIWant.attr('id'); 

或者:

var theTable = $(theTableIWant).get(0); 
theTable.id; 
+0

我沒有分配jQuery元素。 $('table')選擇了表格,然後[1]選擇了該數組中的第二個HTML元素,而不是jQuery元素。 – JoeLinux

+0

另外,在頁面上肯定沒有其他的ID。根據馬特的回答,'#'是不允許的,這是有道理的。 – JoeLinux

+0

此答案不回答問題構成的具體問題。要麼修改回答具體問題,要麼甚至可能刪除您的答案。 –

2

你不應該使用任何這些元字符:在你的IDS !"#$%&'()*+,./:;<=>[email protected][\]^{|}~,類標記名,屬性和值(也倒引號:`,但我不能把它放在一個代碼塊^^)。

,如果你要使用這些字符,你可以逃避他們在您的選擇有兩個反斜槓

$('#office_set-\\#\\#\\#') 

順便說一句你的問題確實是相關的,當這些字符例如用作javscript代碼在onclick屬性中。只有當您正確地轉義元字符(其中會有很多元字符)時,才能找到包含特定代碼的元素。

來源和這裏的更多信息: http://api.jquery.com/category/selectors/

0

您需要引用#字符您的帳號,因爲該字符是一個特殊字符jQuery的。

$('#office_set-\\#\\#\\#'); 

這雙反斜線這樣的JavaScript將它們轉換爲單反斜線其中的jQuery然後看見。

+0

爲什麼downvote?這個答案是正確的。 – jimp