2010-11-12 5 views
0

У меня есть этот XMLJquery XML разбора

<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" /> 

Я хочу, чтобы получить значение атрибута name каждого элемента с атрибутом class содержит строка yyy

ответ

1

Это может работать, не проверял еще. Предполагая, что XML уже разобран и внутри объекта с именем xml.

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

странно, селектор [класс]: содержит ('yyy') не работает. – user137348

+0

@user обновлен с правильным примером. предыдущий явно ошибочный, он искал текст элемента, а не атрибуты. – Anurag

1

class selector получит вам элементы. Функция attr() даст вам имя элемента. Использование each() объекта jQuery позволит вам выполнять итерацию через элемент в объекте jQuery.

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

но zzz - это значение класса атрибута, а XML - в значении javascript. – user137348

+0

@ user137348 обновил мой ответ –

+0

Селектор классов не должен работать против XML. Generic XML не имеет классов; атрибут, просто называемый 'class', не делает ничего особенного. Обратите внимание, что в jQuery это может по-прежнему работать по совпадению, если оно возвращается к движку селектора JavaScript Sizzle (вместо собственных селекторов браузера), поскольку это не знает, что XML 'class' отличается от HTML. Но на самом деле это не поведение, на которое можно положиться. Яркий селектор атрибутов 'class' является более надежным. – bobince

1

Попробуйте следовать, это должно помочь вам.

$(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

Я считаю, что вы можете сделать что-то вроде

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

'~ =' для классов, разделенных пробелами в стиле HTML. '* =' будет соответствовать классу 'ayyyb'. – bobince