如何测试选择器在jQuery中是否有效

Tru*_*an1 4 jquery jquery-selectors anythingslider

我正在使用AnythingSlider jQuery插件,它动态地读取URL中的哈希并通过jQuery选择页面上的项目.问题是如果最终用户访问http://mydomain.com/#!demos/slider,他们可以破解插件.

有没有办法测试选择器是否有效而不是让jQuery崩溃(内置函数或正则表达式)?看到这个尝试做$('#!demos/slider')的jsFiddle示例,它崩溃了:http://jsfiddle.net/PvY2b/

$('#!demos/slider') <= Uncaught Error: Syntax error, unrecognized expression: #!demo/slider
Run Code Online (Sandbox Code Playgroud)

jay*_*rjo 5

ID和NAME令牌必须以字母([A-Za-z])开头,后面可以跟任意数量的字母,数字([0-9]),连字符(" - "),下划线("_") ,冒号(":")和句号(".").

来自:基本HTML数据类型

因此这样的事情可能有效:

if (/^[A-Za-z][A-Za-z0-9\-_:\.]*$/.test(selector)) {
    // $('#' + selector)...
}
Run Code Online (Sandbox Code Playgroud)

或者简单地逃避它:

selector = selector.replace(/([;&,\.\+\*\~':"\!\^#$%@\[\]\(\)=>\|])/g, '\\$1');
Run Code Online (Sandbox Code Playgroud)