2012-04-11 40 views
26

Tôi có một XSL đã tạo ra nhiều yếu tố với id của "createdOn" cộng với một độc đáo-id $Tìm tất cả các yếu tố có id bắt đầu với một chuỗi chung

Example : createdOnid0xfff5db30 

Tôi muốn tìm và lưu trữ chúng trong một biến bằng JavaScript. Tôi đã thử

var dates = document.getElementsById(/createdOn/); 

nhưng điều đó dường như không hoạt động.

+0

có thể trùng lặp của [getElementById() wildcard] (http://stackoverflow.com/questions/4275071/getelementbyid-wildcard) – Liam

Trả lời

46

Sử dụng jQuery bạn có thể sử dụng attr starts with selector:

var dates = $('*[id^="createdOnid"]'); 

Sử dụng trình duyệt hiện đại, bạn có thể sử dụng bộ chọn CSS3 attribute value begins with cùng với querySelectorAll:

var dates = document.querySelectorAll('*[id^="createdOnID"]'); 

Nhưng đối với một dự phòng cho các trình duyệt cũ (và nếu không có jQuery), bạn sẽ cần:

var dateRE = /^createdOnid/; 
var dates=[],els=document.getElementsByTagName('*'); 
for (var i=els.length;i--;) if (dateRE.test(els[i].id]) dates.push(els[i]); 
+0

Đó có phải là '*' -prefix cần thiết không? –

+0

@ Šime Tôi không biết câu trả lời, cho jQuery, thông số kỹ thuật W3C hoặc hành vi trình duyệt trong thế giới thực. Nhưng nó không thể làm tổn thương chức năng :) – Phrogz

+0

Tuyệt. Tôi đã làm Selen làm điều đó với 'self.driver.execute_script (" return document.querySelectorAll ... ") [0] .click()' – osa

6

Bec hãy sử dụng jQuery, và bạn có thể không cần nó, gợi ý của tôi là thêm một lớp vào các phần tử này khi bạn tạo chúng. Sau đó sử dụng hàm getElementsByClassName() được tích hợp vào hầu hết các trình duyệt. Đối với IE bạn sẽ cần phải thêm một cái gì đó giống như this:

if (typeof document.getElementsByClassName!='function') { 
    document.getElementsByClassName = function() { 
     var elms = document.getElementsByTagName('*'); 
     var ei = new Array(); 
     for (i=0;i<elms.length;i++) { 
      if (elms[i].getAttribute('class')) { 
       ecl = elms[i].getAttribute('class').split(' '); 
       for (j=0;j<ecl.length;j++) { 
        if (ecl[j].toLowerCase() == arguments[0].toLowerCase()) { 
         ei.push(elms[i]); 
        } 
       } 
      } else if (elms[i].className) { 
       ecl = elms[i].className.split(' '); 
       for (j=0;j<ecl.length;j++) { 
        if (ecl[j].toLowerCase() == arguments[0].toLowerCase()) { 
         ei.push(elms[i]); 
        } 
       } 
      } 
     } 
     return ei; 
    } 
} 
+0

Kiểm tra className cho một lớp cụ thể có thể dễ dàng hơn và nhanh hơn bằng cách tạo một regex: ' var lookingFor = new RegExp ('(?:^| \\ s)' + đối số [0] + '(?: \\ s | $)'); ... if (lookingFor.test (el.className)) {...} ' – Phrogz

2
function idsLike(str){ 
    var nodes= document.body.getElementsByTagName('*'), 
    L= nodes.length, A= [], temp; 
    while(L){ 
     temp= nodes[--L].id || ''; 
     if(temp.indexOf(str)== 0) A.push(temp); 
    } 
    return A; 
} 

idsLike('createdOn') 
1

Hãy thử như sau:

var values = new Array(valueKey_1); 
var keys = new Array("nameKey_1"); 
var form = document.forms[0]; 
for (var i = 0; i < form.length; i++) { 
    name = form.elements[i].name; 
    var startName = name.toLowerCase().substring(0, 18); 
    if (startName == 'startStringExample') { 
    values.push(name.value); 
    keys.push(name); 
    } 
} 
Các vấn đề liên quan