如何逃避“:”?

时间:2011-01-25 09:35:31

标签: jquery jsf escaping seam

例如我有像

的id
  

someform:somepanel:somebutton

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

修改

我想做这样的事情

jQuery(somefunction("#someform:somepanel:somebutton"))

6 个答案:

答案 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")

相关:


更新#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,"\\:")并添加#,因此您也可以使用它。