如何摆脱“:”?

发布于 2024-10-14 07:07:30 字数 302 浏览 6 评论 0原文

例如我有id喜欢

someform:somepanel:somebutton

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

编辑:

我想做这样的事情

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

for example I have id like

someform:somepanel:somebutton

When I do jQuery("#someform:somepanel:somebutton") it returns someform, how to AUTOMATICALLY escape that id?

EDIT:

I want to do something like this

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

永言不败 2024-10-21 07:07:30

如果只是这个非常专业的版本,您只需 .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;
    });
}

If it's only this very specialized version, you can just .replace() the character.

function somefunction(selector) {
    return selector.replace(/:/, '\\\\:');
}

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

is then converted into

jQuery("#someform\\:somepanel\\:somebutton");

To have a more generic version, you can use a regexp:

function somefunction(selector) {
    return selector.replace(/(!|"|#|\$|%|\'|\(|\)|\*|\+|\,|\.|\/|\:|\;|\?|@)/g, function($1, $2) {
        return "\\\\" + $2;
    });
}
瀟灑尐姊 2024-10-21 07:07:30

使用双反斜杠:

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

相关:


更新#1

在您对 auto 发表评论后 /em> 转义我看到的最好的方法是在字符串对象中创建一个函数,这样

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 选择器将被转义,因此您将找不到您的元素。

但是我们最好的选择是在原型中构建一个字符串解析器来替换它找到一组特定字符的位置,例如:

jQuery("someform(_e(:))somepanel(_e(:))somebutton:first".escape())

这样您就可以定义要转义的内容,但如果是这种情况,您也可以转义他们自己。

use the double backslashes:

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

Related:


Update #1

After your comment in regards to auto escaping the best method I see is to create a function within the string object like so

String.prototype.escape = function()
{
    return this.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/])/g,'\\$1')
}

you can also specifically define a function for the colons like so:

String.prototype.escape_colon = function()
{
     return this.replace(/:/,'\\$1')
}

and use like so:

jQuery("someform:somepanel:somebutton".escape())

but this will cause issues on pseudo selectors such as:

jQuery("someform:somepanel:somebutton:first".escape())

the :first selector will be escaped and therefore you will not find your element.

but y our best bet will be to build a string parser within the prototype to replace where it finds a specific set of chars such as:

jQuery("someform(_e(:))somepanel(_e(:))somebutton:first".escape())

this way you can define what you want to escape, but if that was the case you may as well escape them yourself.

冬天的雪花 2024-10-21 07:07:30

尝试:

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

Try:

jQuery("#someform\\:somepanel\\:somebutton")
極樂鬼 2024-10-21 07:07:30

如果您使用 PrimeFaces,它们有一个方便的辅助函数可以做到这一点:

escapeClientId(id) - 使用分号转义的 JSF id
jQuery。

调用它:

PrimeFaces.escapeClientId("someform:somepanel:somebutton")

它返回:

#someform\\:somepanel\\:somebutton

在内部,它只调用 replace(/:/g,"\\:") 并添加 #,所以你可以使用它,也。

If you use PrimeFaces, they have a handy helper function to do just that:

escapeClientId(id) - Escaped JSF ids with semi colon to work with
jQuery.

To call it:

PrimeFaces.escapeClientId("someform:somepanel:somebutton")

which returns:

#someform\\:somepanel\\:somebutton

Internally, it just calls replace(/:/g,"\\:") and adds the #, so you could use that, too.

深陷 2024-10-21 07:07:30

我在 jQuery 中创建了一个函数来转义 JSF 的冒号:

//USAGE: $(espaceIdForJSF('#someId:anotherId'));
function escapeIdForJSF(id) {
   return id.replace(/:/g,"\\:").replace(/\./g,"\\.");
}

I have created a function to escape colons for JSF in jQuery:

//USAGE: $(espaceIdForJSF('#someId:anotherId'));
function escapeIdForJSF(id) {
   return id.replace(/:/g,"\\:").replace(/\./g,"\\.");
}
飘逸的'云 2024-10-21 07:07:30

使用这个技巧: jQuery($('myid'))

原因:我使用“prototype”按 id 查找元素,然后将结果传递给 jQuery。

优点:更容易阅读。
缺点:需要 Prototype 和 jQuery,但 RichFaces 无论如何都使用 Prototype。

Use this trick: jQuery($('myid'))

Reason: I'm using "prototype" to look up element by id, then I pass result to jQuery.

Pros: easier to read.
Cons: need Prototype and jQuery, but RichFaces uses Prototype anyway.

木格 2024-10-21 07:07:30

JQuery 3.0 提供了转义函数:

https://api.jquery.com /jQuery.escapeSelector/

$( "#" + $.escapeSelector( evilId ) );

JQuery 3.0 provides an escape function:

https://api.jquery.com/jQuery.escapeSelector/

$( "#" + $.escapeSelector( evilId ) );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文