jQuery hasattr проверяет, есть ли атрибут на элементе [дубликат]

Возможные Дубликаты:
проверьте наличие атрибута с помощью JQuery

как вы проверяете, есть ли атрибут на элементе в jQuery? Похожие на hasClass, но с attr?

например,

if ($(this).hasAttr("name")) {
    // ...
}

9 ответов


var attr = $(this).attr('name');

// For some browsers, `attr` is undefined; for others,
// `attr` is false.  Check for both.
if (typeof attr !== typeof undefined && attr !== false) {
    // ...
}

как насчет просто $(this).is("[name]")?

на [attr] синтаксис-это селектор CSS для элемента с атрибутом attr и .is() проверяет, соответствует ли вызываемый элемент заданному селектору CSS.


Если вы будете часто проверять наличие атрибутов, я бы предложил создать hasAttr функция, чтобы использовать, как вы предположили в своем вопросе:

$.fn.hasAttr = function(name) {  
   return this.attr(name) !== undefined;
};

$(document).ready(function() {
    if($('.edit').hasAttr('id')) {
        alert('true');
    } else {
        alert('false');
    }
});

<div class="edit" id="div_1">Test field</div>

ты так близко, что это безумие.

if($(this).attr("name"))

нет hasAttr, но нажатие атрибута по имени просто вернет undefined, если он не существует.

вот почему работает ниже. Если вы удалите атрибут name из # heading, сработает второе предупреждение.

обновление: согласно комментариям, ниже будет только работу, если атрибут присутствует и установлен что-то не если атрибут есть, но пусто

<script type="text/javascript">
$(document).ready(function()
{
    if ($("#heading").attr("name"))
      alert('Look, this is showing because it\'s not undefined');
    else
      alert('This would be called if it were undefined or is there but empty');
});
</script>
<h1 id="heading" name="bob">Welcome!</h1>

опоздал на вечеринку, но... почему не просто this.hasAttribute("name")?

Refer этой


лучший способ сделать это было бы с filter():

$("nav>ul>li>a").filter("[data-page-id]");

все равно было бы неплохо иметь .hasAttr (), но поскольку он не существует, есть этот путь.


Object.prototype.hasAttr = function(attr) {
    if(this.attr) {
        var _attr = this.attr(attr);
    } else {
        var _attr = this.getAttribute(attr);
    }
    return (typeof _attr !== "undefined" && _attr !== false && _attr !== null);      
};

Я пересек это, написав свою собственную функцию, чтобы сделать то же самое... Я подумал, что поделюсь, если кто-то еще споткнется здесь. Я добавил null, потому что getAttribute () вернет null, если атрибут не существует.

этот метод позволит вам проверять объекты jQuery и обычные объекты javascript.


вы также можете использовать его с такими атрибутами, как disabled="disabled" в полях формы и т. д. вот так:

$("#change_password").click(function() {
    var target = $(this).attr("rel");
    if($("#" + target).attr("disabled")) {
        $("#" + target).attr("disabled", false);
    } else {
        $("#" + target).attr("disabled", true);
    }
});

атрибут "rel"хранит идентификатор целевого поля ввода.


Я написал плагин hasAttr() для jquery, который будет делать все это очень просто, точно так, как просил OP. Больше информации здесь

EDIT: Мой плагин был удален в The great plugins.jquery.com катастрофа удаления базы данных 2010 года. Вы можете посмотреть здесь для некоторой информации о добавлении его самостоятельно, и почему он не был добавлен.