例如我有像
的idsomeform:somepanel:somebutton
当我执行jQuery(“#someform:somepanel:somebutton”)时,它返回someform,如何 AUTOMATICALLY 转义该id?
修改
我想做这样的事情
jQuery(somefunction("#someform:somepanel:somebutton"))
答案 0 :(得分:16)
如果它只是这个非常专业的版本,你可以只.replace()
这个角色。
function somefunction(selector) {
return selector.replace(/:/, '\\\\:');
}
jQuery(somefunction("#someform:somepanel:somebutton"))
然后转换为
jQuery("#someform\\:somepanel\\:somebutton");
要拥有更通用的版本,可以使用正则表达式:
function somefunction(selector) {
return selector.replace(/(!|"|#|\$|%|\'|\(|\)|\*|\+|\,|\.|\/|\:|\;|\?|@)/g, function($1, $2) {
return "\\\\" + $2;
});
}
答案 1 :(得分:9)
使用双反斜杠:
jQuery("#someform\\:somepanel\\:somebutton")
相关:
http://api.jquery.com/category/selectors/
!"#$%&'()*+,./:;?@[\]^{|}~
)作为名称的文字部分,则必须使用两个反斜杠转义字符:{{1例如,如果您有一个\\.
的元素,则可以使用选择器id="foo.bar"
。 W3C CSS规范包含complete set of rules regarding valid CSS selectors. 更新#1
关于 auto 的评论后,我看到的最好的方法是在字符串对象中创建一个函数,如此
$("#foo\\.bar")
您还可以专门为冒号定义函数,如下所示:
String.prototype.escape = function()
{
return this.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/])/g,'\\$1')
}
并使用如下:
String.prototype.escape_colon = function()
{
return this.replace(/:/,'\\$1')
}
但这会导致伪选择器出现问题,例如:
jQuery("someform:somepanel:somebutton".escape())
jQuery("someform:somepanel:somebutton:first".escape())
选择器将被转义,因此您将无法找到您的元素。
但我们最好的选择是在原型中构建一个字符串解析器,以替换它找到一组特定字符的位置,例如:
:first
通过这种方式,您可以定义要逃避的内容,但如果是这种情况,您可以自己逃避它们。
答案 2 :(得分:5)
尝试:
jQuery("#someform\\:somepanel\\:somebutton")
答案 3 :(得分:1)
我在jQuery中创建了一个为JSF转义冒号的函数:
//USAGE: $(espaceIdForJSF('#someId:anotherId'));
function escapeIdForJSF(id) {
return id.replace(/:/g,"\\:").replace(/\./g,"\\.");
}
答案 4 :(得分:1)
使用此技巧:jQuery($('myid'))
原因:我正在使用“prototype”按ID查找元素,然后将结果传递给jQuery。
优点:更容易阅读。 缺点:需要Prototype和jQuery,但RichFaces仍然使用Prototype。
答案 5 :(得分:0)
如果你使用PrimeFaces,他们有一个方便的助手功能:
escapeClientId(id) - 使用半冒号转义的JSF ID jQuery的。
要打电话:
PrimeFaces.escapeClientId("someform:somepanel:somebutton")
返回:
#someform\\:somepanel\\:somebutton
在内部,它只是调用replace(/:/g,"\\:")
并添加#
,因此您也可以使用它。