2012-01-03 19 views
52

Có cách nào để đặt tên thành phần ký tự đại diện khớp với querySelector hoặc querySelectorAll không? Tôi thấy hỗ trợ cho các ký tự đại diện trong các truy vấn thuộc tính nhưng không phải cho chính các phần tử đó.querySelector, yếu tố ký tự đại diện khớp?

Tài liệu XML tôi đang cố gắng phân tích về cơ bản là một danh sách phẳng các thuộc tính và tôi cần tìm các phần tử có các chuỗi nhất định trong tên của chúng.

Tôi nhận ra tài liệu XML có thể cần tái cơ cấu nếu tôi cần điều này nhưng điều đó sẽ không xảy ra.

Bất kỳ giải pháp nào ngoại trừ việc trở lại sử dụng XPath dường như không được chấp nhận (IE9 đã bỏ) có thể chấp nhận được.

+0

Bằng "tên" bạn có nghĩa là tên thẻ? – kennytm

+1

Thật không may có –

+0

@ Câu trả lời của JaredMcAteer là rất xứng đáng nhận được chấp nhận như một câu trả lời. Vui lòng xem xét. – RBT

Trả lời

144

[id^='someId'] sẽ khớp với tất cả các id bắt đầu bằng someId.

[id$='someId'] sẽ khớp với tất cả các id kết thúc bằng someId.

[id*='someId'] sẽ khớp với tất cả các id có chứa someId.

Nếu bạn đang tìm thuộc tính name chỉ cần thay thế id bằng name.

Nếu bạn đang nói về tên thẻ của phần tử Tôi không tin rằng có một cách sử dụng querySelector

+3

Cảm ơn, tôi có nghĩa là tên thẻ. –

+0

là ie8 + ??? – SuperUberDuper

+0

hmm Tôi không thể làm document.querySelectorAll ("div. [Id $ = 'foo']") – SuperUberDuper

5

Đặt TagName như một thuộc tính rõ ràng:

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

tôi cần này bản thân mình , đối với Tài liệu XML, có Thẻ lồng nhau kết thúc bằng _Sequence. Xem câu trả lời của JaredMcAteer để biết thêm chi tiết.

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

Tôi không nói nó sẽ là khá :) PS: Tôi muốn giới thiệu để sử dụng tag_name qua tagname, do đó bạn không chạy vào nhiễu khi đọc 'máy tính tạo ra', ngầm DOM thuộc tính.

4

tôi đã phiền/mơ màng trên một lớp lót liên quan đến querySelector() & đã kết thúc ở đây, & có một câu trả lời có thể cho câu hỏi OP sử dụng tên thẻ & querySelector(), với tín dụng cho @JaredMcAteer cho trả lời câu hỏi MY, aka có trận đấu RegEx giống như với querySelector() trong vani Javascript

Hy vọng những điều sau đây sẽ hữu ích & phù hợp với nhu cầu của OP hoặc tất cả mọi người khác:

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

sau đó, chúng ta có thể, ví dụ, có những thứ src , v.v ...

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

+

-7

này làm việc cho tôi:

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

Hiện tất cả các tên kết thúc hộ "057".

+0

Ngôn ngữ lập trình nào là ?! Đây là câu hỏi ** JavaScript ** –

+0

Đây là mục tiêu C chứ không phải JavaScript – vonox7

1

Tôi vừa viết kịch bản ngắn này; dường như hoạt động.

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