jquery hasAttr в Webkit и Opera - PullRequest
       0

jquery hasAttr в Webkit и Opera

1 голос
/ 15 февраля 2011

Aloha,

Я нашел ответ на свой вопрос здесь . В основном я хочу сказать, есть ли у тега атрибут. Мне все равно, какое значение, только если оно есть.

Я сейчас использую:

$.fn.hasAttr = function (attr) {
    var attribVal = this.attr(attr);
    alert(attr+" ["+attribVal+"]");
    return (attribVal !== undefined) && (attribVal !== false);
};

Эта функция не работает в Opera или Webkit. Возвращает true, даже если атрибут не существует. Предупреждение, которое я добавил, показывает, что attribVal равно пустому, не ложному, не неопределенному, не нулевому, а пустому. Firefox и IE это прекрасно работает, так как attribVal не определено.

Проблема в том, что я хочу, чтобы он возвращал значение true для пустого атрибута, если оно указано в теге, и значение false, если атрибут не указан в теге.

Edit: ожидаемые результаты ...

<tag />                    should be hasAttr('placeholder') = false
<tag placeholder />        should be hasAttr('placeholder') = true
<tag placeholder="" />     should be hasAttr('placeholder') = true
<tag placeholder="Hi" />   should be hasAttr('placeholder') = true

Редактировать: Текущий код

Это работает в WebKit и FF, а не в IE или Opera.

Обновление После всего этого мой оригинальный код работает, если только я не смотрю на атрибут заполнителя. Opera и webkit возвращают true для всех четырех опций, когда я смотрю на атрибут placeholder. См. здесь для примера. Я обновил ожидаемые результаты, чтобы использовать атрибут placeholder.

Ответы [ 3 ]

1 голос
/ 16 февраля 2011

Это должно работать во всех браузерах:

 $.fn.hasAttr = function (attr) {
     for (var i = 0; i < this[0].attributes.length; i++) {
         if (this[0].attributes[i].nodeName == attr) {return true}
     }
    return false;
 };
0 голосов
/ 16 февраля 2011

Простое решение jQuery-ish будет:

$.fn.hasAttr = function(attr) {
    return this.is('[' + attr + ']');
};

jsFiddle .NB. У меня сейчас нет доступа к IE или Opera, чтобы проверить это ...

0 голосов
/ 15 февраля 2011

Вы не должны явно проверять undefined, а просто проверять falsy values.

return !!attribVal;

Это вернет false для null, undefined, "", NaN, 0 и, конечно, false.

Подробнее о !!.

Обновление

Ваше желаемое поведение должно быть возможным при использовании Sizzle:

$.fn.hasAttr = function (attr) {
    var attribVal = this.attr(attr);
    return (typeof attribVal === 'string');
};

Пример : http://jsfiddle.net/4UJJk/11/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...