2011-08-16 40 views
6

Özniteliği ile bir xml düğümünü yakalamaya çalışıyorum. Jquery yerine javascript xml kullanarak özellik değeri ile bir öğe almak için çalışıyorumÖzniteliğe göre xml öğesini almanın bir yolu var mı?

düzenlemek. Bunun için basit bir yöntem var mı?

+6

Bunu yapma. Bu kaba. Unsuruyla yakalamadan önce elemanla konuşmaya çalışın. Cidden, sorunuzla ilgilenebilir misiniz? Ne denedin ve sonuç neydi? –

+0

jquery.find ("node [id = '1']") yerine javascript kullanarak bir eleman almaya çalışıyorum – Wenn

+0

Lütfen unvanlarınızı "Javascript:" ile önceden yazmayın. Etiketler bunun için var. –

cevap

2

önce öğelerin listesini yapın, ardından özniteliklerine göre filtreleyin.

burada Kontrol dışarı demomu: Gerçekten kolay jQuery kullanıyor http://jsfiddle.net/silkster/eDP5V/

+0

Ben de öyle yaptım. Daha basit bir yol olup olmadığını görmek istedim. – Wenn

+0

@Wenn, oy için teşekkürler! – Silkster

1

buna yanlış senaryoyu yayınladığını bana işaret edilmiştir

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


JQuery Ücretsiz olarak bu yeni bir yanıt haklı hissediyorum .. hehe here okumak

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

Bunun jakasız bir yanıt olduğuna emin misin? '$ (parentElement)' ... – Brian

+0

whoops! Aynı forumlarda ikiye bakıyordum .... http://www.codingforums.com/showthread.php?t=26744 İkisini de test ettim .. benim için işe yarayacak gibi görünüyor. – rlemon

+1

Tam olarak jQuery'den değil, jQuery lite'den emin olun - uzantı/eklenti/modül yok ... – Brian

1

. Bunun gibi bir dizimiz olduğunu varsayalım.

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

Sonra

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

Biz dize 'John' geri alacak.

İlgili konular