34 votes

Sélecteurs d'attribut jQuery: comment interroger un attribut avec un espace de noms personnalisé

Supposons que j'ai un simple document XHTML qui utilise un espace de noms personnalisé pour les attributs:

 <html xmlns="..." xmlns:custom="http://www.example.com/ns">
    ...
    <div class="foo" custom:attr="bla"/>
    ...
</html>
 

Comment puis-je faire correspondre chaque élément qui a un certain attribut personnalisé à l'aide de jQuery? En utilisant

 $("div[custom:attr]")
 

ne marche pas. (Jusqu'à présent, essayé avec Firefox uniquement.)

43voto

Devon Points 3115

jQuery ne prend pas directement en charge les espaces de noms personnalisés, mais vous pouvez trouver les divs que vous recherchez en utilisant la fonction de filtre.

 // find all divs that have custom:attr
$('div').filter(function() { return $(this).attr('custom:attr'); }).each(function() {
  // matched a div with custom::attr
  $(this).html('I was found.');
});
 

19voto

Fyrd Points 181

Cela fonctionne dans certaines conditions:

$("div[custom\\:attr]")

Cependant, pour une méthode plus avancée, consultez ce plug-in jQuery d'espace de noms XML

7voto

Suphi Basdemir Points 87

la syntaxe de correspondance par attribut est:

$ ("div [customattr = bla]") correspond à --div customattr = "bla" -

$ ("[customattr]") correspond à toutes les balises avec l'attribut "customattr"

avec des attributs d'espace de noms comme 'custom: attr' ça ne fonctionne pas

Vous trouverez ici un bon aperçu: http://www.pamaya.com/jquery-selectors-and-attribute-selectors-reference-and-examples/

3voto

redsquare Points 47518

regardez ici http://pastebin.me/48d233d998b4b

essentiellement son $ ('div'). attr ('custom: attr')

2voto

Charlie Kilian Points 3469

Voici une implémentation d'un sélecteur personnalisé qui fonctionne pour moi.

 // Custom jQuery selector to select on custom namespaced attributes
$.expr[':'].nsAttr = function(obj, index, meta, stack) {

    // if the parameter isn't a string, the selector is invalid, 
    // so always return false.
    if ( typeof meta[3] != 'string' )
        return false;

    // if the parameter doesn't have an '=' character in it, 
    // assume it is an attribute name with no value, 
    // and match all elements that have only that attribute name.
    if ( meta[3].indexOf('=') == -1 )
    {
        var val = $(obj).attr(meta[3]);
        return (typeof val !== 'undefined' && val !== false);
    }
    // if the parameter does contain an '=' character, 
    // we should only match elements that have an attribute 
    // with a matching name and value.
    else
    {
        // split the parameter into name/value pairs
        var arr = meta[3].split('=', 2);
        var attrName  = arr[0];
        var attrValue = arr[1];

        // if the current object has an attribute matching the specified 
        // name & value, include it in our selection.
        return ( $(obj).attr(attrName) == attrValue );
    }
};
 

Exemple d'utilisation:

 // Show all divs where the custom attribute matches both name and value.
$('div:nsAttr(MyNameSpace:customAttr=someValue)').show();

// Show all divs that have the custom attribute, regardless of its value.
$('div:nsAttr(MyNameSpace:customAttr)').show();
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X