2013-03-21 103 views
0

我已經尋找了一些問題,這方面(如How to handle special characters in html element id/name in Jquery validation?),但遺憾的是它並不能幫助我,或者我沒有undertsood的伎倆......如何使用/傳遞包含特殊字符的attr('id')?

比方說,我們有一個按鈕,帶班.bt和id my|id。 (或其他特殊分隔像,:;|

它似乎並不有可能用它來搭配像$('#other_'+$('.bt').attr('id'))

另一個元素,您可以看到一個example here

所以我的問題是,如何傳輸這些特殊字符(,:;|)?

+3

特殊字符必須以\\進行轉義。 http://api.jquery.com/category/selectors/ – 2013-03-21 18:11:05

+0

好的,謝謝,那麼在這種情況下我該怎麼做?用'replace('|','\ |',id)'?或其他方法? – Valky 2013-03-21 18:13:26

+1

你爲什麼要在你的ID中放入這些特殊字符? 'ID和NAME標記必須以字母([A-Za-z])開頭,後面跟着任意數量的字母,數字([0-9]),連字符(「 - 」),下劃線(「_」 ),冒號(「:」)和句點(「。」)。 - [基本HTML數據類型](http://www.w3.org/TR/html4/types.html#type-id) – couzzi 2013-03-21 18:13:29

回答

2

這種用法是從純jQuery的解決方案的偏差,但也許在這種情況下,最好使用本地document.getElementById(...)功能?

$(document.getElementById('other_' + $('.bt').attr('id'))) 

它讀得有點冗長,但看​​起來比使用正則表達式更清晰/一致/安全。

+0

+1感謝這個解決方案,它也可以工作,但couzzi解決方案是更好地使用jQuery。 – Valky 2013-03-21 18:37:36

+0

由couzzi提供的解決方案更簡潔,但不會逃避'''字符,也可能有性能問題(並不重要)。YMMV :) – 2013-03-21 18:41:19

+0

是的,關於它的評論,我要檢查你的回答:客戶端執行速度更快, – Valky 2013-03-21 18:45:16

1

是否這樣?

$('#other_' + $('.bt').attr('id').replace('|', '\\|')); 

http://jsfiddle.net/S669p/

+0

感謝您的回答,但似乎其他答案更好,無論如何+1(不需要其他用戶獲得-1) – Valky 2013-03-21 18:34:40

2

這工作:

$('[id="div_' + id + '"]').html(id); 

,而不是這樣的:

$('#div_'+id).html(id); 

小提琴 here

CNC中

New fiddle顯示的,:;|

+0

+1非常感謝,它似乎是使用jquery選擇器的更好解決方案,沒有正則表達式/替換。 – Valky 2013-03-21 18:38:46

+1

好的建議,但是這會花費額外的工作,因爲瀏覽器不能使用'document.getElementById',它的速度更快。 jQuery將不得不使用Sizzle(並首先解析它,最終可能使用'getElementById')或'document.querySelectorAll'。不是你會注意到它,但至少要記住 – Ian 2013-03-21 18:39:00

+0

好點兒伊恩!我認爲這歸結爲兩個惡魔中較小的一個。 – couzzi 2013-03-21 18:41:13

1

這裏是一個仍然使用id選擇一個例子,但也允許你希望能夠使用任何特殊字符:

$(document).ready(function() { 
    $(".bt").on("click", function() { 
     var escaped = $(this).attr("id").replace(/([,:;|])/g, "\\$1"); 
     console.log("escaped: " + escaped); 
     $("#other_" + escaped).toggleClass("testing"); 
    }); 
}); 

http://jsfiddle.net/Bz3Kw/1/

+0

+1 Thanks,this works ,但我保留它用於其他用途,因爲其他答覆似乎更輕。 – Valky 2013-03-21 18:36:30