2012-08-13 29 views
0

我經常看到的字符串連接jQuery選擇內:jQuery選擇器中的變量和字符串連接 - 它被認爲是有害的嗎?

var $field = $('.' + field, $form); 
var $label = $('label[for="' + $field.attr('id') + '"]'); 
var $elem = $('#' + elem); 

由於periods and colons are valid in element ids(誰知道什麼可能是在其他屬性),是這樣的代碼不是潛在的危險?

我發現某些選擇器不是以其他任何方式寫的小事 - 那麼標準的做法是什麼?原生DOM方法並不總是可用的。

我一直避免奇怪的字符在IDS等,但編寫工具供其他人一般使用,這將是很好,以避免這一警告。

回答

0

如果您完全控制了字符串中的內容,那麼這不是問題,但對於庫工具來說,這將是一個問題。

只是不接受工具的名稱或標識,接受完整的選擇器或元素/ jQuery引用。這種方式是使用該工具創建工作選擇器的人員的責任。

+0

我喜歡這個想法。在我的特定工具中,我有一個指定服務器端的表單字段的名稱和ID列表,當表單被回發時(例如,必填字段),它們會再次使用。指定'['name1','name2','name3']'服務器端對用戶來說是最簡單的選擇,然後我的代碼處理剩下的部分。 – Flash 2012-08-13 11:24:30

0

只要您控制fieldelem中的內容,您的第一個和第三個示例都很常見,並且無害。

我從來沒有使用第二種形式,並且將它寫像這樣:

var match = $field.attr('id');  // or $field[0].id 
var $label = $('label').filter(function() { 
    return this.getAttribute('for') === match; 
}); 

從而徹底避免了需要擔心逃逸match內容。

+0

但這不是更昂貴 - 因爲它不會使用瀏覽器的本機'querySelector'或類似的? – Flash 2012-08-13 11:12:37

+0

@安德魯它是_potentially_(稍微)更貴,這取決於有多少'標籤'元素。我不會擔心這種差異,除非這個呼叫是在一個緊密的循環中重複進行的。 – Alnitak 2012-08-13 11:20:13

+0

謝謝 - 如果第一個和第三個都沒問題,你爲什麼不使用第二個? – Flash 2012-08-13 11:28:03

相關問題