2011-08-16 29 views
6

Próbuję pobrać węzeł xml według jego atrybutu.Czy istnieje sposób, aby uzyskać xml Exlement przez atrybut?

edit

Próbuję pobrać element jej wartością atrybutu xml przy użyciu javascript zamiast jQuery. Czy istnieje prosta metoda?

+6

Nie rób tego. To jest niegrzeczne. Staraj się mówić do elementu, zanim zaczniesz go chwytać według jego atrybutu. Poważnie, czy możesz rozwinąć swoje pytanie? Co próbowałeś i jakie były wyniki? –

+0

Próbuję uzyskać element za pomocą javascript zamiast jquery.find ("node [id = '1']") – Wenn

+0

Nie należy prefiksować tytułów "JavaScript:". Po to są tagi. –

Odpowiedz

2

Musisz znaleźć najpierw listę elementów, a następnie filtr według ich atrybutów.

Sprawdź moje demo tutaj: http://jsfiddle.net/silkster/eDP5V/

+0

Tak właśnie zrobiłem. Chciałem tylko zobaczyć, czy jest inny prostszy sposób. – Wenn

+0

@Wenn, dziękuję za głosowanie! – Silkster

1

czuję, że to uzasadnia nową odpowiedź, ponieważ jest JQuery bezpłatny

document.getElementsByAttribute = function(attribute, value, tagName, parentElement) { 
    var children = ($(parentElement) || document.body).getElementsByTagName((tagName || '*')); 
    return $A(children).inject([], function(elements, child) { 
     var attributeValue = child.getAttribute(attribute); 
     if(attributeValue != null) { 
      if(!value || attributeValue == value) { 
       elements.push(child); 
      } 
     } 
     return elements; 
    }); 
} 

source


został on wskazał mi, że napisałem złego scenariusza .. hehe czytać here

// document.getElementsByAttribute([string attributeName],[string attributeValue],[boolean isCommaHyphenOrSpaceSeparatedList:false]) 
document.getElementsByAttribute=function(attrN,attrV,multi){ 
    attrV=attrV.replace(/\|/g,'\\|').replace(/\[/g,'\\[').replace(/\(/g,'\\(').replace(/\+/g,'\\+').replace(/\./g,'\\.').replace(/\*/g,'\\*').replace(/\?/g,'\\?').replace(/\//g,'\\/'); 
    var 
     multi=typeof multi!='undefined'? 
      multi: 
      false, 
     cIterate=document.getElementsByTagName('*'), 
     aResponse=[], 
     attr, 
     re=new RegExp(multi?'\\b'+attrV+'\\b':'^'+attrV+'$'), 
     i=0, 
     elm; 
    while((elm=cIterate.item(i++))){ 
     attr=elm.getAttributeNode(attrN); 
     if(attr && 
      attr.specified && 
      re.test(attr.value) 
     ) 
      aResponse.push(elm); 
    } 
    return aResponse; 
} 
+0

czy jesteś pewien, że jest to odpowiedź wolna od jquery? '$ (parentElement)' ...? – Brian

+0

whoops! Patrzyłem na dwóch na tym samym forum .... http://www.codingforums.com/showthread.php?t=26744 Testowałem oba .. wydaje się pracować dla mnie. – rlemon

+1

Więc nie dokładnie jQuery darmo, ale jQuery Lite na pewno - bez rozszerzeń/wtyczek/modułów ... – Brian

1

To jest naprawdę łatwe przy użyciu jQuery. Załóżmy, że mamy taki ciąg.

<document> 
    <value type="people"> 
     <name> 
     John 
     </name> 
    </value> 
    <value type="vehicle"> 
     <name> 
     Ford 
     </name> 
    </value> 
</document> 

Następnie

var xmlDocument = $.parseXML(str); 
$(xmlDocument).find("value[type='people'] name").text() 

Będziemy się ciąg 'John' Back.

Powiązane problemy