我可以使用id='#ul_[]ER$%#'
控制但是当我使用以下正则表达式语法来转义控件ID中的特殊字符时,它会返回以下字符串#ul_\[\]\E\R\$\%\#
,
它也逃脱了字母表。我怎样才能使用jQuery转义字符串中的特殊字符。为了逃避我在正则表达式后面使用的特殊字符:
$("#ul_"+data.replace(/([#;&,.+-_=?{}*~\':%"!^$[\]()=>|\/])/g,"\\$1"))
答案 0 :(得分:0)
有两个问题:
正则表达式类(-
)中的[...]
不会被视为文字连字符,而是划分从+
到_
的范围,包括大写字母数字字符。所以要么逃避连字符,要么把它放在课程的最后;
id
属性的选择器应以#
开头。虽然您的id
属性值以散列(#
)开头,但您需要另一个属性值,并且您需要转义属于id
值的属性。
所以这会奏效:
var data = '[]ER$%#';
var sel = '#' + ("#ul_"+data).replace(/([#;&,.+\-_=?{}*~\':%"!^$[\]()=>|\/])/g,"\\$1");
console.log($(sel).text());
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='#ul_[]ER$%#'>test</div>
更多评论:
-
和_
。它们在jQuery选择器中没有特殊含义。 `
(后退勾号),@
和<
应进行转义。请参阅jQuery documentation:要使用任何元字符(例如
!"#$%&'()*+,./:;<=>?@[\]^`{|}~
)作为名称的文字部分,必须将其转义
答案 1 :(得分:0)
此处介绍的功能可能对您有用:
https://totaldev.com/escaping-characters-to-get-a-valid-jquery-id/
function jqSelector(str) {
return str.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1');
}
然后像这样使用它:
$('#'+jqSelector('id.with,special#characters')).text('My Selected Element');