2010-02-10 12 views
6

puedo comprobar si un elemento tiene un atributo específico con:cheque jQuery si el elemento contiene un atributo

if ($('#A').attr('myattr') !== undefined) { 
    // attribute exists 
} else { 
    // attribute does not exist 
} 

¿Cómo puedo comprobar si un elemento tiene ningún atributo?

Gracias

+0

Me pregunto si jQuery ofrece algo como '$ (" # a [*] ")'? –

+0

@Naeem: Creo que podría ser una buena característica, pero como hay formas fáciles de resolver este problema, no creo que puedan agregarlo. – Tarik

Respuesta

6

Esta es una función que t determina si cualquiera de los elementos que coinciden con un selector tienen al menos un atributo:

function hasOneOrMoreAttributes(selector) { 
    var hasAttribute = false; 
    $(selector).each(function(index, element) { 
     if (element.attributes.length > 0) { 
      hasAttribute = true; 
      return false; // breaks out of the each once we find an attribute 
     } 
    }); 
    return hasAttribute; 
} 

Uso:

if (hasOneOrMoreAttributes('.someClass')) { 
    // Do something 
} 

Si desea operar sobre los elementos seleccionados que tienen al menos un atributo, es aún más fácil - crear un filtro personalizado:

// Works on the latest versions of Firefox, IE, Safari, and Chrome 
// But not IE 6 (for reasons I don't understand) 
jQuery.expr[':'].hasAttributes = function(elem) { 
    return elem.attributes.length; 
}; 

que se puede utilizar de esta manera:

$(document).ready(function(){ 
    $('li:hasAttributes').addClass('superImportant'); 
} 
+0

¿No es un poco demasiado:' $ ("algo"). Get (0) .attributes> 0' sería suficiente Creo. – Tarik

+0

@Tarik: solo verifica el primer elemento coincidente, cuando puede haber varias coincidencias. –

+0

@Jeff - ¿Hay alguna manera de agregar una clase en los elementos que tienen atributos con esta función? Gracias otra vez – Mircea

9

Si usted quiere ver si el elemento tiene un atributo particular, simplemente hacer esto:

if ($('#something').is('[attribute]')) { 
    // ... 
} 
+1

Me interesa ver si un elemento tiene algún atributo, no uno específico. – Mircea

+0

OK, pero el punto es que lo que escribió en su ejemplo anterior no funcionará. – Pointy

+0

Ah, vale, entiendo tu punto ... Gracias – Mircea

2
No

su conjunto Código de jQuery pero funcionará

$("a").click(
function() { 
    if($("a").get(0).attributes > 0) 
     alert("it has attributes"); 
}) 
+0

Thanx Tarik, estoy buscando en este – Mircea

0

Aquí es una solución que he encontrado para ser más fiable para saber si un elemento ha definido atributos que funciona en IE, Chrome y Firefox:

$(selector).each(function(index, element) { 
    if (element.hasAttributes) { // Some browser supports this method 
     if (element.hasAttributes()) { 
      return true; 
     } 
    } else { 
      // IE counts many attributes - even if not set explicitly 
      var attrs = element.attributes; 
      for (var i = 0; i < attrs.length; i++) { 
       if (attrs[i].specified) { 
        return true; 
       } 
      } 
    } 
    return false; 
}); 

El problema es que IE devuelve atributos altos cuentan incluso cuando ninguno está establecido explícitamente Por ejemplo, para una simple etiqueta < p>, IE me decía que tenía 111 atributos. Con esta solución, yo era capaz de filtrar aquellos atributos que no estaba interesado en

Esta solución llevaron aquí:. (! Simplemente copié en caso de que la página se retira) http://help.dottoro.com/ljevmnkf.php

1

estoy no estoy seguro si usted está queriendo simplemente devolver los elementos que contienen el atributo, pero si es así, he encontrado la mejor manera de ser:

$('selector[attribute]') 

que devolverá el objeto jQuery para incluir todos los elementos que contener el atributo independientemente de su valor. Por ejemplo.

$(':text[maxlength]').addClass('has_max_length'); 

Esto daría a todas las entradas de texto con la maxlength atribuyen una clase de 'has_max_length'.

4
$("selector").get(0).hasAttributes("attributes"); 
+0

¡Gran respuesta! Gracias –

Cuestiones relacionadas