jAn*_*ndy 16
如果它只是这个非常专业的版本,你可以只是.replace()角色.
function somefunction(selector) {
return selector.replace(/:/, '\\\\:');
}
jQuery(somefunction("#someform:somepanel:somebutton"))
Run Code Online (Sandbox Code Playgroud)
然后被转换成
jQuery("#someform\\:somepanel\\:somebutton");
Run Code Online (Sandbox Code Playgroud)
要拥有更通用的版本,可以使用正则表达式:
function somefunction(selector) {
return selector.replace(/(!|"|#|\$|%|\'|\(|\)|\*|\+|\,|\.|\/|\:|\;|\?|@)/g, function($1, $2) {
return "\\\\" + $2;
});
}
Run Code Online (Sandbox Code Playgroud)
使用双反斜杠:
jQuery("#someform\\:somepanel\\:somebutton")
Run Code Online (Sandbox Code Playgroud)
有关:
http://api.jquery.com/category/selectors/
!"#$%&'()*+,./:;?@[\]^{|}~)作为名称的文字部分,则必须使用两个反斜杠转义字符:\\.例如,如果您有一个元素id="foo.bar",则可以使用选择器$("#foo\\.bar").W3C CSS规范包含有关有效CSS选择器的完整规则集.更新#1
关于自动转义关于自动转义的最佳方法,我看到的是在字符串对象中创建一个函数,就像这样
String.prototype.escape = function()
{
return this.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/])/g,'\\$1')
}
Run Code Online (Sandbox Code Playgroud)
你也可以专门为冒号定义一个函数,如下所示:
String.prototype.escape_colon = function()
{
return this.replace(/:/,'\\$1')
}
Run Code Online (Sandbox Code Playgroud)
并使用如下:
jQuery("someform:somepanel:somebutton".escape())
Run Code Online (Sandbox Code Playgroud)
但这会导致伪选择器出现问题,例如:
jQuery("someform:somepanel:somebutton:first".escape())
Run Code Online (Sandbox Code Playgroud)
在:first选择将被转义,所以你不会找到你的元素.
但我们最好的选择是在原型中构建一个字符串解析器,以替换它找到一组特定字符的位置,例如:
jQuery("someform(_e(:))somepanel(_e(:))somebutton:first".escape())
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以定义要逃避的内容,但如果是这种情况,您可以自己逃避它们.
| 归档时间: |
|
| 查看次数: |
16619 次 |
| 最近记录: |