<div id="unit(1).li" class="unit(1){[.]}li"></div>
function escapeJquery (srcStr, type) {
/*
* srcStr: 需转换的字符串
* type: 0:属性选择器,1:类和id选择器
* */
var jsSpecialChars = [['\\', '^', '$', '*', '?', '#', '.', '+', '(', ')', '[',
']', '|', '{', '}', '~', '`', '@', '%', '&', '=', '\'', '"',
':', ';', '<', '>', ',', '/'
], ['\\', '\"', '\'']]
var resultStr = srcStr
if ([0, 1].indexOf(type) === -1) {
return resultStr
}
jsSpecialChars[type].map(function (chars) {
var reg = new RegExp('\\' + chars, 'gim')
resultStr = resultStr.replace(reg, '\\' + chars)
})
return resultStr
}
前置知识:在JS中
'\a'
会表现为'a'
,且'\a'.length === 1
特殊符号无法选中元素问题解决方法: (因为获取不到单斜线,所以下面的方法碰到
\
会出现获取不到)
-
通过属性选择器和小部分转义
(\'")
, 属性选择器一定要写里面的引号,例:$('[id=""]')
-
分开写选择器标志,只转义属性值 jquery选择器第一个符号要单独写出来,不然没法处理 (id=‘a’ class=‘b’)的情况(.#)不能转义否则获取不到元素,
$('#'+escapeJquery('unit(1).li',0)) $('#' + escapeJquery('unit(1).li', 0) + '.' + escapeJquery('unit(1){[.]}li', 0))