Я пытаюсь использовать регистр "содержит" без учета регистра. Я попытался использовать решение по следующему вопросу о стеке, но это не сработало:
Есть ли селектор jQuery: contains без учета регистра?
Для удобства решение скопировано сюда:
jQuery.extend(
jQuery.expr[':'], {
Contains : "jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0"
});
Вот ошибка:
Error: q is not a function
Source File: /js/jquery-1.4.js?ver=1.4
Line: 81
Вот где я его использую:
$('input.preset').keyup(function() {
$(this).next().find("li").removeClass("bold");
var theMatch = $(this).val();
if (theMatch.length > 1){
theMatch = "li:Contains('" + theMatch + "')";
$(this).next().find(theMatch).addClass("bold");
}
});
Мое использование исходного "содержит" с учетом регистра в том же сценарии работает без ошибок. У кого-нибудь есть идеи? Я бы оценил это.
:containsExact
,:containsExactCase
и:containsRegex
селекторы теперь работает во всех версиях JQuery.Ответы:
Это то, что я использую в текущем проекте, никаких проблем не было. Посмотрим, удастся ли вам больше с этим форматом:
jQuery.expr[':'].Contains = function(a, i, m) { return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0; };
В jQuery 1.8 API для этого изменился, версия jQuery 1.8+ этого будет:
jQuery.expr[":"].Contains = jQuery.expr.createPseudo(function(arg) { return function( elem ) { return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0; }; });
Вы можете проверить это здесь . Более подробную информацию о пользовательских селекторах 1.8+ см . В вики Sizzle здесь .
источник
icontains
или что-то подобное.Стоит отметить, что ответ правильный, но только охватывает
:Contains
, а не псевдоним,:contains
который может привести к неожиданному поведению (или может использоваться при разработке для сложных приложений, требующих как чувствительного, так и нечувствительного поиска).Это можно решить, продублировав расширение псевдонима:
jQuery.expr[':'].Contains = function(a, i, m) { return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0; }; jQuery.expr[':'].contains = function(a, i, m) { return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0; };
Мне потребовалось время, чтобы понять, почему это не работает для меня.
источник
:contains
. Думаю, проще оставить оригинал в:contains
покое и вызвать новый селектор:icontains
.Я бы сделал что-то подобное
$.expr[':'].containsIgnoreCase = function (n, i, m) { return jQuery(n).text().toUpperCase().indexOf(m[3].toUpperCase()) >= 0; };
И оставь в
:contains
покое ...ДЕМО
Так почему же jQuery не поддерживает его в своей библиотеке ?! если это так просто ...
потому что ваш код передает код индейки?
источник
Может быть поздно .... но,
Я бы предпочел пойти этим путем ..
$.extend($.expr[":"], { "MyCaseInsensitiveContains": function(elem, i, match, array) { return (elem.textContent || elem.innerText || "").toLowerCase().indexOf((match[3] || "").toLowerCase()) >= 0; } });
Таким образом, вы НЕ ИСПОЛЬЗУЕТЕ JQuery NATIVE '.contains' ... Возможно, вам понадобится значение по умолчанию позже ... если вмешаться, вы можете вернуться к stackOverFlow ...
источник
позволю себе добавить своих друзей:
$.expr[":"].containsNoCase = function (el, i, m) { var search = m[3]; if (!search) return false; return eval("/" + search + "/i").test($(el).text()); };
источник
Мне просто удалось полностью игнорировать чувствительность к регистру jQuery, чтобы добиться того, чего я хочу, используя приведенный ниже код:
$.expr[":"].contains = $.expr.createPseudo(function(arg) { return function( elem ) { return $(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0; }; });
Вы можете использовать эту ссылку, чтобы найти код на основе ваших версий jQuery, чтобы игнорировать чувствительность к регистру, https://css-tricks.com/snippets/jquery/make-jquery-contains-case-insensitive/
Также, если вы хотите использовать: contains и выполнить поиск, вы можете взглянуть на это: http://technarco.com/jquery/using-jquery-search-html-text-and-show-or-hide- соответственно
источник