2011-08-16 8 views
6

XMLノードをその属性で取得しようとしています。属性でgetElement xmlを作成する方法はありますか?

編集

私はjavascriptのXMLの代わりにjQueryを使用して、その属性値によって要素を取得しようとしています。これには簡単な方法がありますか?

+6

しないでください。それは失礼です。その属性によってそれをつかむ前に要素に話してみてください。真剣に、あなたの質問に詳しいことができますか?あなたは何を試しましたか、結果は何でしたか? –

+0

jquery.find( "node [id = '1']")の代わりにjavascriptを使用して要素を取得しようとしています – Wenn

+0

タイトルに「Javascript:」というプレフィックスを付けないでください。それはタグのためのものです。 –

答えて

2

最初に要素のリストを作成し、次にそれらの属性でフィルタリングします。

ここでチェックアウト私のデモを:それは本当に簡単にjQueryを使用しているhttp://jsfiddle.net/silkster/eDP5V/

+0

それは私がやったことです。もっと単純な方法があるかどうかを知りたかっただけです。 – Wenn

+0

@Wenn、投票ありがとう! – Silkster

1

私はそれは私が間違ってスクリプトを掲示することを私に指摘されている。..笑hereを読んでjQueryの無料

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


であるとして、これは新しい答えを正当化する感じ

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

これはjqueryフリーの回答ですか? '$(parentElement)' ... ...? – Brian

+0

おっと!私は同じフォーラムで2つを見ていた.... http://www.codingforums.com/showthread.php?t=26744私は両方をテスト..私のために働くようだ。 – rlemon

+1

正確にはjQueryは無料ではありませんが、jQueryは確実にliteです。拡張機能/プラグイン/モジュールはありません... – Brian

1

。このような文字列があるとします。

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

その後

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

私たちは、文字列 'ジョン戻ってきます。

関連する問題