是否有一个插件使jQuery id选择器点安全?

时间:2011-03-30 17:29:38

标签: jquery dom jquery-plugins jquery-selectors

我已经知道如何选择ID为包含点的DOM元素,并且我已经阅读了stackoverflow上的所有相关答案(例如:How to select html nodes by ID with jquery when the id contains a dot?),但问题是那里有很多插件不知道这个问题,并且没有通过我们正在使用的所有插件的代码并适当地替换选择器,我想可能还有另一个jQuery的插件/扩展替换了主选择器机制使其点安全。我正在使用像jqGrid这样的插件,我在代码中看到很多地方使用过这样的东西:

$('#' + id).somefunction()

有什么想法吗?

提前致谢

1 个答案:

答案 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);