2012-01-03 16 views
52

querySelectorまたはquerySelectorAllを使用してワイルドカード要素名の一致を行う方法はありますか?属性クエリではワイルドカードがサポートされていますが、要素自体はサポートされていません。querySelector、ワイルドカード要素が一致していますか?

私が解析しようとしているXML文書は、基本的にプロパティのフラットなリストであり、名前に特定の文字列を持つ要素を見つける必要があります。

私はこれが必要な場合、おそらくXML文書が再構築を必要としていることを認識していますが、それは起こりそうにありません。

明らかに推奨されていないXPath(IE9が落としたもの)を使用すること以外は、すべての解決方法が許されます。

+0

「名前」とは、タグ名のことですか? – kennytm

+1

残念ながらyes –

+0

@ JaredMcAteerの回答は非常に答えとして受け入れられる価値があります。考えてください。 – RBT

答えて

144

[id^='someId']は、someIdで始まるすべてのIDと一致します。

[id$='someId']は、すべてのIDがsomeIdで終わるものと一致します。

[id*='someId']は、someIdを含むすべてのIDと一致します。

name属性を検索する場合は、idnameに置き換えてください。

あなたは要素のタグ名の話をしている場合は、私は明示的な属性としてはtagNameを設定querySelector

+3

ありがとう、私はタグ名を意味しました。 –

+0

はこれですie8 + ??? – SuperUberDuper

+0

hmm私はdocument.querySelectorAll( "div。[id $ = 'foo']")の – SuperUberDuper

5

使用方法があると信じていない:私はこれを自分で必要な

for(var i=0,els=document.querySelectorAll('*'); i<els.length; 
      els[i].setAttribute('tagName',els[i++].tagName)); 

は、ネストされたタグが_Sequenceで終わるXMLドキュメントの場合詳細については、JaredMcAteerの回答を参照してください。

document.querySelectorAll('[tagName$="_Sequence"]') 

私はそれはかなりだろう言いませんでした:) PS:「生成されたコンピュータ」を読んだときに、干渉に実行されませんので、私は暗黙のDOM属性、tagNameをかけtag_nameを使用することをお勧めします。

4

私は&は、&は私の質問に答えるために@JaredMcAteerするクレジットで、タグ名& querySelectorを()を使用して、OPの質問に可能な答えを持ってここに終わったquerySelector()を含むワンライナーで物思いにふけっ/いじりました、別名その後、我々は、例えば、SRCのものを得ることができます

// basically, of before: 
var youtubeDiv = document.querySelector('iframe[src="http://www.youtube.com/embed/Jk5lTqQzoKA"]') 

// after  
var youtubeDiv = document.querySelector('iframe[src^="http://www.youtube.com"]'); 
// or even, for my needs 
var youtubeDiv = document.querySelector('iframe[src*="youtube"]'); 

:バニラJavaScriptでquerySelectorと正規表現のような試合に()

を持って、次は&有用であろうことを望んOPのニーズに合うか、皆さんなど。

console.log(youtubeDiv.src); 
//> "http://www.youtube.com/embed/Jk5lTqQzoKA" 
console.debug(youtubeDiv); 
//> (...) 

+

-7

これが私の作品:

NSString *nameInWeb = [NSMutableString stringWithFormat:@"document.querySelector('[name$=\"057\"]').name"]; 

は "057" whith終わるすべての名前を表示します。

+0

どのようなプログラミング言語ですか?これは** JavaScript **の質問 –

+0

これはJavaScriptではなくObjective Cです – vonox7

1

私はこの短いスクリプトを書いています。動作するようです。

/** 
* Find all the elements with a tagName that matches. 
* @param {RegExp} regEx regular expression to match against tagName 
* @returns {Array}  elements in the DOM that match 
*/ 
function getAllTagMatches(regEx) { 
    return Array.prototype.slice.call(document.querySelectorAll('*')).filter(function (el) { 
    return el.tagName.match(regEx); 
    }); 
} 
getAllTagMatches(/^di/i); // Returns an array of all elements that begin with "di", eg "div" 
関連する問題