Есть ли плагин, который делает селектор идентификатора jQuery точечно-безопасным? - PullRequest
2 голосов
/ 30 марта 2011

Я уже знаю, как выбирать элементы DOM с идентификаторами, которые содержат точки, и я прочитал все связанные ответы по stackoverflow (например, так: Как выбрать html-узлы по идентификатору с помощью jquery, когда идентификатор содержит точку ? ), но проблема в том, что существует множество плагинов, которые не знают об этой проблеме, и если не считать кода всех плагинов, которые мы используем, и заменить селекторы соответствующим образом, я думал что, возможно, есть другой плагин / расширение для jQuery, который заменяет основной механизм выбора, чтобы сделать его безопасным для точек. Я использую плагины, такие как jqGrid, и я видел много мест в коде, где используется нечто подобное:

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

Есть идеи?

Заранее спасибо

1 Ответ

1 голос
/ 30 марта 2011

Вы можете изменить функцию $.fn.init, чтобы изменить поведение jQuery, но нет быстрого и простого способа убедиться, что идентификаторы с точками в них безопасны во всем приложении.Быстрое и грязное решение заменит все . с \\., изменив функцию init, но тогда все ваши селекторы класса сломаются.

Единственный надежный способ сделать это - передать идентификаторы с экранированными точками всем вашим плагинам.

РЕДАКТИРОВАТЬ

Если вы действительно хотите быстрое и грязное решение, вот то, которое по крайней мере будет работать, если у вас нет чего-то вроде #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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...