jQuery sprawdza czy na elemencie jest atrybut [duplikat]

Możliwy duplikat:
Sprawdź istnienie atrybutu za pomocą JQuery

Jak sprawdzić, czy na elemencie w jQuery jest atrybut? Podobne do hasClass, ale z attr?

Na przykład,

if ($(this).hasAttr("name")) {
    // ...
}
 614
Author: Community, 2009-08-23

9 answers

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) {
    // ...
}
 957
Author: strager,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-18 11:12:38

Może po prostu $(this).is("[name]")?

Składnia [attr] jest selektorem CSS dla elementu z atrybutem attr i .is() sprawdza, czy element, na którym jest wywołany, pasuje do podanego selektora CSS.

 568
Author: Domenic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-11 19:59:17

Jeśli będziesz często sprawdzał istnienie atrybutów, sugerowałbym utworzenie hasAttr funkcji, której użyjesz tak jak postawiłeś w swoim pytaniu:

$.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>
 134
Author: karim79,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-23 09:11:48

Jesteś tak blisko, że to szaleństwo.

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

Nie ma hasAttr, ale naciśnięcie atrybutu po nazwie zwróci undefined, jeśli nie istnieje.

Oto dlaczego poniższe działa. Jeśli usuniesz atrybut name Z nagłówka#, uruchomi się drugi alarm.

Update: zgodnie z komentarzami, poniżej działa tylko, jeśli atrybut jest obecny i jest ustawiony na coś, nie jeśli atrybut jest tam, ale pusty

<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>
 80
Author: Tristan Warner-Smith,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-04-17 13:38:59

Spóźniłem się na imprezę, ale ... .. dlaczego nie po prostu this.hasAttribute("name")?

Refer This

 69
Author: Domenic,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-07 14:37:17

Najlepszym sposobem na to będzie filter():

$("nav>ul>li>a").filter("[data-page-id]");
Nadal byłoby miło mieć .hasAttr (), ale ponieważ nie istnieje, jest w ten sposób.
 15
Author: JamesM-SiteGen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-06-27 18:52:37
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);      
};

Doszedłem do tego, pisząc własną funkcję, aby zrobić to samo... Chciałbym się podzielić, gdyby ktoś inny się tu potykał. Dodałem null, ponieważ getAttribute() zwróci null, jeśli atrybut nie istnieje.

Ta metoda pozwoli Ci sprawdzić obiekty jQuery i zwykłe obiekty javascript.

 7
Author: rlemon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-23 15:03:28

Można go również używać z atrybutami takimi jak disabled="disabled" w polach formularza itp. tak:

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

Atrybut " rel " przechowuje id docelowego pola wejściowego.

 5
Author: user398341,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-08-11 13:37:35

Napisałem wtyczkę hasAttr () do jquery, która zrobi to wszystko bardzo prosto, dokładnie tak, jak zażądał OP. Więcej informacji tutaj

EDIT: Moja wtyczka została usunięta w Wielkiej plugins.jquery.com katastrofa usuwania bazy danych w 2010 roku. Możesz zajrzeć tutaj , aby uzyskać informacje na temat samodzielnego dodawania i dlaczego nie został dodany.

 5
Author: bmarti44,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-08 14:34:35