2011-05-24 27 views
0

我有問題,以下內容:http://jsfiddle.net/x55LD/1/jQuery的解析自定義標籤奇怪

我試圖解析使用jQuery 1.6自定義標記。它工作正常,除非標籤位於<select>標籤內。例如:

var string = '<div><blah></blah><select><blah></blah></select></div>'; 

$(string).find('blah').each(function() { 
    console.log("Found tag!"); 
}); 

儘管存在兩個<blah>標記,但這隻會記錄一條消息。 <select>中的第二個<blah>標記將不被識別。有誰知道爲什麼會發生這種情況?

回答

2

問題在於它不是解析的JavaScript或jQuery,而是瀏覽器。雖然可能會認爲<select>標籤是您自己的自定義交易,但瀏覽器不同意並且預計它僅包含<option><optgroup>標籤。

當你通過jQuery將字符串包裝起來時,內部發生的事情是,jQuery將字符串作爲臨時元素的「innerHTML」傳遞給瀏覽器。瀏覽器期望它有HTML工作,所以當它看到非法標記它基本上處理它但是它想要。也許有些瀏覽器會將<blah>標籤單獨放置,但其他瀏覽器不會。

2

作爲使用無效HTML的替代方法,請使用自定義屬性來標記標記或存儲數據。

<div><span blah></span><select blah></select></div> 

然後你可以使用屬性選擇:

$('[blah]')... 

您還可以使用HTML5樣式屬性如data-something="my data"並使用$.data直接獲得價值。

由於非標準標籤的內容可能只是呈現出來,所以與使用帶有自定義屬性的span標籤完全沒有區別。我不確定你想要在選項組中實現一個自定義標籤,但我不認爲你希望它被渲染,所以可能在選擇或特定選項上實現自定義標籤你的目標。