2012-04-11 64 views
26

我有一個創建了「createdOn」的ID加一個$唯一ID查找ID開始相同的字符串的所有元素

Example : createdOnid0xfff5db30 

我想找到和這些存儲在多個元素一個XSL使用JavaScript的變量。我試過

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

但似乎並沒有工作。

+0

的[的getElementById()通配符]可能的複製(http://stackoverflow.com/questions/4275071/getelementbyid-wildcard) – Liam 2017-05-12 12:28:45

回答

46

使用jQuery你可以使用attr starts with選擇:

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

使用現代的瀏覽器,你可以用querySelectorAll一起使用CSS3 attribute value begins with選擇:

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

但對於舊的瀏覽器的回退(和沒有jQuery的),你將需要:

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

是否需要'*'-prefix? – 2012-04-11 18:22:56

+0

@Šime我不知道答案,無論是jQuery,W3C規範還是真實世界的瀏覽器行爲。但它不能傷害功能:) – Phrogz 2012-04-11 18:24:40

+0

很酷。我讓Selenium通過'self.driver.execute_script(「return document.querySelectorAll ...」)來實現這一點[0] .click()' – osa 2014-09-25 21:15:53

6

的Bec因爲你沒有標記jQuery,你可能不需要它,我的建議是在創建它們時爲這些元素添加一個類。然後使用內置於大多數瀏覽器中的getElementsByClassName()函數。對於IE瀏覽器,你將需要添加類似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

通過創建一個正則表達式,測試特定類的className可以更容易,更快速: var lookingFor = new RegExp('(?:^ | \\ s)'+ arguments [0] +'(?:\\ s | $)'); ... if(lookingFor.test(el.className)){...}' – Phrogz 2012-04-11 18:29:15

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

嘗試以下操作:

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); 
    } 
} 
相關問題