2012-10-26 2 views
1

Je voulais sélectionner tous les éléments dans le DOM qui ont un rayon de frontière! == 0.Existe-t-il un moyen de sélectionner des éléments qui utilisent une propriété CSS3 spécifique?

Est-ce que vous connaissez un moyen de faire cela?

+2

sans leur attribuer une classe spécifique? Cela ne sera pas efficace ... –

+1

Qu'en est-il de la prise en charge du rayon de bordure préfixé par le fournisseur? Par exemple '-moz-border-radius',' webkit-border-radius', '-o-border-rayon', etc? Ex: le cas où 'css ('border-radius')' ne renvoie rien mais 'css ('- webkit-border-radius')' retourne quelque chose? –

+1

@RoatinMarth La [version 1.8 de jQuery] (http://blog.jquery.com/2012/08/09/jquery-1-8-released/) corrige ce problème avec le préfixe CSS automatique dans '.css()' méthode. – Blazemonger

Répondre

6

Oui. Utilisez la fonction .filter().

$(elements).filter(function(){ 
    return parseInt($(this).css("border-radius"),10) != 0; 
}); 
+2

Ne devriez-vous pas 'parseInt ($ (this) .css (" border-radius "), 10)' avant de le comparer? – Blazemonger

+0

@Blazemonger, bon appel. Merci pour les commentaires! – JoeFletch

+1

Maintenant, nous avons juste besoin de traiter le cas rare mais possible où 'border-radius: 0px 2px' .... – Blazemonger

4

Utilisez une classe CSS pour définir votre rayon de bordure, puis utilisez jQuery pour les sélectionner.

CSS:

.border-radius { 
    border-radius: 4px; 
} 

JS:

$('.border-radius') 
+1

Probablement pas ce que l'OP voulait, mais encore mieux que de ne pas changer HTML en termes de performances. Upvoted. –

+0

encore, je ne pense pas que ce soit un bon nom de classe. –

3

Parce que je veux être complet, nous devons considérer le fait que border-radius peut accepter plusieurs valeurs pour décrire les quatre coins individuellement:

$('*').filter(function() { 
    var br = $(this).css("border-radius").split(' '), 
     test = false; 
    for (var i = 0, j = br.length; i < j; i++) { 
     test = test || parseInt(br[i], 10); 
    }; 
    return test; 
}) 

http://jsfiddle.net/mblase75/SLUcb/

Cela dit, le filtrage CHAQUE élément sur la page est outrageusement inefficace. La meilleure approche consiste simplement à affecter le border-radius à une classe et à tester l'existence d'objets avec cette classe.

Questions connexes