如何逃避":"?

IAd*_*ter 16 jquery jsf seam escaping

例如,我喜欢

someform:somepanel:somebutton

当我执行jQuery("#someform:somepanel:somebutton")时,它返回someform,如何自动转义该id?

编辑:

我想做这样的事情

jQuery(somefunction("#someform:somepanel:somebutton"))
Run Code Online (Sandbox Code Playgroud)

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)


Rob*_*itt 9

使用双反斜杠:

 jQuery("#someform\\:somepanel\\:somebutton")
Run Code Online (Sandbox Code Playgroud)

有关:


更新#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)

通过这种方式,您可以定义要逃避的内容,但如果是这种情况,您可以自己逃避它们.


Voo*_*ild 5

尝试:

jQuery("#someform\\:somepanel\\:somebutton")
Run Code Online (Sandbox Code Playgroud)