2011-02-08 162 views
3

我想擴展jQuery選擇,以便它將給定的選擇值視爲一個ID。jQuery自定義選擇

例如,當您做$("foo.bar")時,jQuery將嘗試選擇標籤名爲foo和類欄的所有元素,但我希望jQuery選擇ID爲foo.bar的元素。我不希望每次都需要轉換點並預先安裝一個#,我想添加一個jQuery作爲一個函數,以便我可以執行諸如$("id:foo.bar")之類的操作。

這可能與jQuery?如果是這樣,任何人都可以給我一些例子嗎?

謝謝。

+0

出於好奇...爲什麼?可讀性? – 2011-02-08 01:22:09

+0

我的項目使用Spring MVC,其中嵌套的元素名稱(如foo.bar)非常常見。我需要大量選擇這些元素,並且不得不預先在數字符號前添加ID,更重要的是,每次都會出現轉義點。 – 2011-02-08 01:25:03

+1

您是否意識到這樣做會使您受到的性能下降? – RightSaidFred 2011-02-08 01:52:08

回答

2

如果您有一個屬性過濾器更換ID的選擇,它必須測試頁面的每一個元素該ID代替使用document.getElementById

如果你想多一點便利,只需創建自己的包裝。如果你願意,可以使用jQuery的命名空間:

jQuery.byId = function(id){return $(document.getElementById(id));}; 

$.byId('foo.bar').addClass('something'); 
1

我沒有具體的代碼來做到這一點。請注意,重寫jquery的全局行爲可能會破壞其他人所做的插件。如果你可以的話,你應該使用jQuery 1.5的'sub'特性。它專門設計用於「保留jquery特性」,同時保留其他插件的默認功能。

+0

這是一個鏈接。 http://api.jquery.com/jQuery.sub/ – rcravens 2011-02-08 01:23:50

2

你可以做$("[id=foo.bar]")

3

它。您可以通過擴展.expr[]來創建自己的選擇器。例如:

$.extend($.expr[':'], { 
    'id': function(elem, i, attr){ 
     return(elem.id === attr[3]); 
    } 
}); 

用法是:

$(':id(foo.bar)'); 

演示http://www.jsfiddle.net/cwwGk/1/