【问题标题】:Is there a plugin that makes the jQuery id selector dot-safe?是否有使 jQuery id 选择器点安全的插件?
【发布时间】:2011-07-26 06:45:40
【问题描述】:

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

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

有什么想法吗?

提前致谢

【问题讨论】:

    标签: jquery dom jquery-plugins jquery-selectors


    【解决方案1】:

    您可以更改$.fn.init 函数来更改jQuery 的行为,但是没有一种快速简便的方法可以确保带有点的ID 在整个应用程序中都是安全的。一个快速而肮脏的解决方案将通过更改init 函数将所有.s 替换为\\.,但随后您的所有类选择器都会中断。

    唯一可靠的方法是将带有转义点的 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);
    

    【讨论】:

    • 在与错误作斗争一整天后,我发布了最初的问题,因为我们的后端开发人员坚持认为我们无法摆脱的愚蠢点(我讨厌 Java!)。后来我在回家的路上才想到,如果不破坏类选择器,这是不可能的,就像你提到的那样。无论如何感谢您的回答。顺便说一句,感谢那些在 W3C 的 DOM ID 标准已经允许点时提出点作为 CSS 的类选择器的人!
    • 顺便说一下,每个 ID 只允许一个点。如果您想允许更多或无限制,则需要根据自己的喜好调整该代码。
    • 是的,W3C 伙计们,没有人喜欢双 dotter!
    • 或者我可以做selector = selector.replace(/\./g, "\\.");,不是吗?抱歉,我什至没有注意正则表达式,重点是它会破坏类选择器。
    • 你可以这样做,但如果类选择器与 ID 配对,那将立即破坏它们。我的尝试检测是否有空间。即ul#my.menu li.home 将与我一起工作,而简化版本将产生ul#my\.menu li\.home
    猜你喜欢
    • 2013-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 2014-10-10
    • 1970-01-01
    相关资源
    最近更新 更多