jQuery hat eigentlich keine Funktion namens .hasAttr(). Man könnte annehmen, dass es sie gibt, aber leider ist dem nicht so.
Ein StackOverflow-Thread bietet einige ziemlich gute Lösungen.
Das Attribut abrufen, den Wert prüfen
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) {
// Element has this attribute
}
Native JavaScript hat einen Weg
Wenn Sie nur eine jQuery-Referenz haben…
$(this)[0].hasAttribute("name");
jQObject[0].hasAttribute("name");
Die Auswahl filtern
$(this).is('[name]');
$(this).filter("[name='choice']");
Sieht so aus, als wäre ein zusätzliches typeof in der if-Bedingung des ersten Codeblocks vorhanden. Sollte es nicht heißen: if(typeof attr !== ‘undefined’ && attr !== false) … ?
Das erste typeof bezieht sich auf das attr, das zweite typeof bezieht sich auf undefined. Aber wichtiger ist, ich habe mich gefragt, ob es verkürzt werden könnte zu
var attr = $(this).attr(‘name’);
// Bei einigen Browsern ist
attrundefined; bei anderen istattrfalse. Prüfen Sie beides.if (attr && attr !== false) {
// Element hat dieses Attribut
}
oder
if (attr) {
// Element hat dieses Attribut
}
Ich denke, das Testen auf if (attr) würde identifizieren, ob attr undefined ist, oder nicht?
Tim
Ich weiß nicht, ob ich etwas übersehe, aber wie wäre es damit?
if ($(this).is('[name]')) {
// Element hat dieses Attribut
}
Hallo. Wenn Sie „undefined“ nicht in Anführungszeichen setzen, funktioniert es für Chrome nicht.
Sie sollten die ODER (||) Bedingung anstelle von && verwenden, da sie hier nicht funktioniert, hier ist die korrekte Form.