2014-05-19 136 views
1

當我在程序中遇到這個問題時,我有點困惑。所以我想知道是否有人知道這裏可能會達成什麼協議。畢竟,我對Jquery來說相當陌生。

爲什麼:我

$('[id="' + nameOftheID + '"]').append("Append some text"); 

工作。

然而

$("#" + nameOftheID).append("Append some text"); 

不會爲我工作。 在這種情況下,'nameOftheID'是一個var,它與範圍內的ID完全相同我試圖附加一些文本(我在調試中測試並確認了這一點)。爲什麼基於ID的正常的#選擇符選擇不會爲我添加文本。但另一種方法呢?

我的代碼在最後工作。我只想知道爲什麼A有效,B不是。

我ID的名稱 「規則集[0] .Conditions [0]」

+0

第一個是名稱值選擇器,第二個是id選擇器。 –

+2

'nameOftheID'是否包含任何特殊字符,如'[]'如果是這樣你需要轉義它們。 – Anton

+0

顯示一個jsfiddle演示。 –

回答

2

你必須使用\\的轉義字符

#Ruleset\\[0\\]\.Conditions\\[0\\] 

下面是兩個選擇的differnce:

$("#" + nameOftheID).append("Append som text"); 

上面的代碼通過ID選擇元素,這裏的語法是使用#

而且

$('[id="' + nameOftheID + '"]').append("Append some text"); 

這都在屬性選擇,在那裏你可以限制像下面

$('input[id="inputId"]').append("Append some text");// here it will check the id attribute of input tag only 

此外,屬性選擇器可用於查找與價值開始元素特定標籤的選擇一些文字,如查找輸入與ID開始'nameOf'

$('input[id^="nameOf"]').append("Append some text"); 

母雞ce屬性選擇器可用於獲取具有更多篩選或更精確選擇的元素。請在選擇器here上查找更多信息。

1

The ID is Ruleset[0].Conditions[0] as an example

你的ID包含在選擇特殊含義的字符。

如果你只是以#爲前綴,那麼[將啓動一個屬性選擇器,而.將啓動一個類選擇器。如果在選擇器中使用它們,則必須在選擇器中轉義具有特殊含義的字符。

#Ruleset\[0\]\.Conditions\[0\] 

請注意,您必須包括選擇轉義字符字符串在那\是對JavaScript字符串文字的轉義字符(這將需要以使該字符串的一部分\逃逸本身)。

這些字符在帶引號的屬性選擇器中沒有特殊含義。

我更願意避免這個問題,首先在id值之外保留帶有特殊含義的字符。

+2

你需要雙倍\\逃脫 – Anton

0

My code works in the end. I just want to know why A works and B doesnt.

灒(jQuery的一個處理$(...)東西的部分)成爲ID爲以下:

"(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+" 

即,轉義字符,或一個字字符,或一個ASCII字符更高比\xA0。這不包括所有標點和正則表達式元字符,如[。所以,當你像#foo[]$功能,它不會被認可,並拋出錯誤:

Uncaught Error: Syntax error, unrecognized expression: #foo[] 

的屬性選擇,在另一邊,只需要加引號的字符串,不關心其內容。

0

正如我在評論部分,你的跨度的id擁有一些特殊字符像[]括號中看到:

此代碼

$('[id="' + nameOftheID + '"]') 

代表這樣的:

$('[id="Ruleset[0].Conditions[0]"]') // works because of string representation. 

這代表了ID作爲一個字符串,所以它的工作原理,但另一個不是這種情況,對於該ID代表你必須逃避你的規範ial chars雙斜槓\\

相關問題