我已经知道如何选择ID为包含点的DOM元素,并且我已经阅读了stackoverflow上的所有相关答案(例如:How to select html nodes by ID with jquery when the id contains a dot?),但问题是那里有很多插件不知道这个问题,并且没有通过我们正在使用的所有插件的代码并适当地替换选择器,我想可能还有另一个jQuery的插件/扩展替换了主选择器机制使其点安全。我正在使用像jqGrid这样的插件,我在代码中看到很多地方使用过这样的东西:
$('#' + id).somefunction()
有什么想法吗?
提前致谢
答案 0 :(得分:1)
您可以更改$.fn.init
函数来更改jQuery的行为,但是没有一种快速简便的方法可以确保在整个应用程序中带有点的ID是安全的。快速而肮脏的解决方案会通过更改.
函数替换所有\\.
init
,但随后所有类选择器都会中断。
唯一可靠的方法是将带有转义点的ID传递给所有插件。
修改强>
如果你想要一个快速而肮脏的解决方案,只要你没有像#id.class
这样的东西,这个问题至少会有效。它适用于#id .class
(中间的空格)。
(function($){
$.fn._init = $.fn.init;
$.fn.init = function ( selector, context, rootjQuery ) {
if (typeof selector == 'string' && selector.match('#')) {
selector = selector.replace(/\#([^\s\.]*)\./g, '#$1\\.')
}
return new $.fn._init(selector,context,rootjQuery);
}
})(jQuery);