2012-01-03 638 views
52

有沒有辦法使用querySelectorquerySelectorAll進行通配符元素名稱匹配?我在屬性查詢中看到對通配符的支持,但不支持元素本身。querySelector,通配符元素匹配?

我試圖解析的XML文檔基本上是一個扁平的屬性列表,我需要找到在其名稱中包含特定字符串的元素。

我意識到XML文檔可能需要重組,如果我需要這個,但那不會發生。

任何解決方案,除了回去使用顯然已棄用的XPath(IE9放棄它)是可以接受的。

+0

「name」是指標籤名稱? – kennytm 2012-01-03 15:12:04

+1

不幸的是 – 2012-01-03 15:27:16

+0

@ JaredMcAteer的回答非常值得接受爲答案。請考慮。 – RBT 2017-06-20 08:28:59

回答

144

[id^='someId']將匹配從someId開始的所有ID。

[id$='someId']將匹配以someId結尾的所有ID。

[id*='someId']將匹配所有包含someId的ID。

如果您正在尋找name屬性,請將id替換爲name

如果你談論的是我不相信有使用querySelector

+3

謝謝,我的意思是標籤名稱。 – 2012-01-03 15:32:04

+0

是這個ie8 +? – SuperUberDuper 2016-02-11 15:54:17

+0

嗯,我不能做document.querySelectorAll(「div。[id $ ='foo']」) – SuperUberDuper 2016-02-11 15:56:25

5

設置標記名的明確屬性的方法的元素的標籤名稱:

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

我這個需要自己,對於XML文檔,嵌套標籤以_Sequence結尾。有關更多詳細信息,請參閱JaredMcAteer回答。

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

我沒有說這將是非常:) PS:我會建議使用tag_name超過記名,所以閱讀「計算機生成」,隱含的DOM屬性,當你不碰到干擾。

4

我被搞亂/沉思對涉及querySelector()&在這裏結束了,&有可能的答案,使用標籤名& querySelector(),與學分OP問題@JaredMcAteer回答我的問題的俏皮話,又名有querySelector()正則表達式樣的比賽在香草的Javascript

希望能在下面將&適合OP的需要或其他人的有用:

// 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"]'); 

然後,我們可以,例如,獲得SRC東西等...

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

+

-7

這個工作對我來說:

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

顯示所有名稱蒙山 「057」 結尾。

+0

這是什麼編程語言?!這是一個** JavaScript **問題 – 2016-04-06 15:50:45

+0

這是Objective C,而不是JavaScript – vonox7 2016-04-07 11:41:54

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"