2010-12-28 17 views
18
<div class="selectedColumns" > 
<a href="#" attributeid="19" >Driver License State</a> 
<a href="#" attributeid="21" >Email</a> 
<a href="#" attributeid="23" >Experience Level</a> 
<a href="#" attributeid="26" >First Name</a> 
<a href="#" attributeid="71" >Is Account Enabled</a> 
<a href="#" attributeid="39" >Last Contacted Date</a> 
<a href="#" attributeid="40" >Last Name</a> 
<a href="#" attributeid="41" >Middle Name</a> 
<a href="#" attributeid="6">Carrier</a> 
</div> 

Tengo un conjunto de enlaces. Cada enlace tiene una propiedad attributeid. Me gustaría filtrar por valor de atributo. Entonces en los enlaces de arriba si tengo un valor de 41 devolvería el enlace del Segundo Nombre.jQuery filtro por un valor de atributo

var link = $('.selectedColumns a:[attributeid==' + $(this).val() + ']'); 

Esto no funcionó?

+2

Tenga en cuenta que el uso de atributos personalizados da como resultado documentos [no válidos] (http://validator.w3.org) en HTML4 y versiones inferiores. En HTML5, puede tener atributos personalizados válidos si comienzan con 'data-' (por ejemplo, 'data-attributeid'). Esos aún son inválidos en versiones anteriores, pero bueno, también lo es tu actual. :-) –

+0

@ T.J. - Me doy cuenta de que el w3c dice que esto no es un no, pero cuando construyes un 'software' que depende mucho de jQuery, usas atributos personalizados todo el tiempo y no te preocupes por la validación. – Mark

+2

Me doy cuenta de lo que está diciendo, y estoy de acuerdo con usted, de hecho * también lo hace W3C *, de lo contrario no se agregarían en HTML5. Lo que está diciendo es que si vas a usar * algo *, ¿por qué no seguir adelante y elegir un nombre de atributo 'data-something' que * será * válido para seguir adelante? –

Respuesta

18

uso una sola vez de = 2. Además, el: shoudn't estar allí yo sepa

var link = $('.selectedColumns a[attributeid=' + $(this).val() + ']'); 
15

No hay necesidad de que el : o doble = en su attribute-equals selector, que sólo debe ser:

$('.selectedColumns a[attributeid=' + $(this).val() + ']'); 

Además, si usted está utilizando atributos no válidos, considerar el uso de data- attributes cuales son válida en HTML5, por ejemplo, en lugar de data-idattributeid.

26

No afirmando que esto sea más elegante, pero usar filter() en una colección permite mucha más flexibilidad en lo que puede coincidir, y es un poco menos propenso a errores que la concatenación de cadenas.

var matching = $('.selectedColumns a').filter(function(){ 
        return $(this).attr('attributeid') == 41 
       }); 
    matching.prop('selected', true); 
Cuestiones relacionadas