Есть ли нечувствительный к регистру jQuery: содержит селектор?

Другое событие NullPointerException возникает, когда объявляется массив объектов, а затем сразу же пытается разыменовать его внутри.

String[] phrases = new String[10];
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

Этот конкретный NPE можно избежать, если порядок сравнения отменяется ; а именно, использовать .equals для гарантированного непустого объекта.

Все элементы внутри массива инициализируются их общим начальным значением ; для любого типа массива объектов, это означает, что все элементы null.

Вы должны инициализировать элементы в массиве перед доступом или разыменованием их.

String[] phrases = new String[] {"The bird", "A bird", "My bird", "Bird"};
String keyPhrase = "Bird";
for(String phrase : phrases) {
    System.out.println(phrase.equals(keyPhrase));
}

140
задан BoltClock 25 September 2014 в 16:57
поделиться

4 ответа

То, что я закончил тем, что делал для jQuery 1.2:

jQuery.extend(
    jQuery.expr[':'], { 
        Contains : "jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0" 
});

Это расширит jQuery, чтобы иметь a: Содержит селектор, который нечувствителен к регистру: содержит селектор, остается неизменным.

Редактирование: Для jQuery 1.3 (благодарит @user95227) и позже Вам нужно

jQuery.expr[':'].Contains = function(a,i,m){
     return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
};

Редактирование: По-видимому, доступ к DOM непосредственно при помощи [1 110]

(a.textContent || a.innerText || "") 

вместо [1 111]

jQuery(a).text()

В предыдущем выражении значительно ускоряет его так попытка на Ваш собственный риск, если скорость является проблемой. (см. вопрос @John )

Последнее редактирование: Для jQuery 1.8 это должно быть:

jQuery.expr[":"].Contains = jQuery.expr.createPseudo(function(arg) {
    return function( elem ) {
        return jQuery(elem).text().toUpperCase().indexOf(arg.toUpperCase()) >= 0;
    };
});
120
ответ дан 23 November 2019 в 23:13
поделиться

As of jQuery 1.3, this method is deprecated. To get this to work it needs to be defined as a function:

jQuery.expr[':'].Contains = function(a,i,m){
    return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
};
40
ответ дан 23 November 2019 в 23:13
поделиться

Если кому-то (как я) интересно, что делает и , m[3], средний в , Содержит определение.

<час>

КЛЮЧ/ЛЕГЕНДА: Params, сделанный доступный jQuery для использования в селекторных определениях:

r = массив jQuery тщательно исследуемых элементов. (например: r.length = Число элементов)

я = индекс элемента в настоящее время под наблюдением, в массиве r.

= элемент в настоящее время под наблюдением. Селекторный оператор должен возвратить true для включения его в его подобранные результаты.

m[2] = nodeName или *, что мы поиск (оставленный двоеточия).

m[3] = параметрический усилитель передал в: селектор (параметрический усилитель). Обычно индекс, как в [1 110]: энный из типа (5) , или строка, как в [1 111]: цвет (синий) .

38
ответ дан 23 November 2019 в 23:13
поделиться
jQuery.expr[':'].contains = function(a,i,m){
    return jQuery(a).text().toUpperCase().indexOf(m[3].toUpperCase())>=0;
};

Код обновления отлично работает в версии 1.3, но в отличие от предыдущего примера "содержит" должна быть строчная в первой букве.

6
ответ дан 23 November 2019 в 23:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: