2010-11-12 3 views
0

Je possède ce XMLXML Jquery analyse syntaxique

<items> 
    <item validate="NotEmpty ValidEmail" class="xxx yyy zzz" type="input" name="Id" value="" label="Id" /> 
    <item validate="NotEmpty" type="input" name="NazovProjektu" value="" label="NazovProjektu" /> 
    <item type="input" name="Oz" value="" label="Oz" /> 

Je veux obtenir la valeur de l'attribut name de chaque élément avec l'attribut class chaîne contenant yyy

Répondre

1

Cela pourrait fonctionner, n'ont pas encore testé. En supposant que le XML est déjà analysé et à l'intérieur d'un objet nommé xml.

$(xml).find("[class~='yyy']").each(function(i, element) { 
    console.log($(element).attr("name")); 
}); 
+0

étrange, les sélecteurs [classe]: contient ('yyy') ne fonctionne pas .. – user137348

+0

@user mis à jour avec l'exemple correct. le précédent était clairement faux, il cherchait dans le texte de l'élément, plutôt que des attributs. – Anurag

1

A class selector vous obtiendrez la éléments. La fonction attr() vous obtiendra le nom de l'élément. L'utilisation de each() sur l'objet jQuery vous permettra de parcourir l'élément dans l'objet jQuery.

var yourXML = "..."; 
$("[class*='zzz']", yourXML).each(function() { 
    alert($(this).attr("name")); 
}); 
+0

mais zzz est la valeur de la classe d'attributs et le code XML est dans une valeur javascript. – user137348

+0

@ user137348 a mis à jour ma réponse –

+0

Un sélecteur de classe ne doit pas fonctionner avec XML. XML générique n'a pas de classes; un attribut juste appelé 'class' n'a rien de spécial. Notez que dans jQuery cela peut encore fonctionner par coïncidence si cela revient au moteur de sélection JavaScript Sizzle (au lieu des sélecteurs natifs du navigateur), car cela ne sait pas qu'un XML 'class' est différent d'un HTML. Mais ce n'est pas vraiment un comportement sur lequel s'appuyer. Un sélecteur d'attribut 'class' explicite est plus fiable. – bobince

1

essayez de suivre, ça devrait vous aider.

$(document).ready(function() 
{ 
    $.ajax({ 
    type: "GET", 
    url: "data.xml", 
    dataType: "xml", 
    success: function(xml) 
     { 
      //find every yyy classname and alert its name 
      $(xml).find(".yyy").each(function() 
      { 
      alert($(this).attr('name')); 
      }); 
     } 
    }); 
}); 
1

Je crois que vous pouvez faire quelque chose comme

$("item[class*=yyy]", xml).each(function() { 
    $(this).attr('name'); 
}); 
+1

'~ =' pour les classes séparées par un espace de style HTML. '* =' correspondrait à une classe 'ayyyb'. – bobince