2012-04-11 2 views
26

I持っている「createdOn」のIDを加えたidが共通の文字列で始まるすべての要素を検索

Example : createdOnid0xfff5db30 

は、私が見つけ、これらを保存したい$ユニーク-idを持つ複数の要素を作成したXSL JavaScriptを使用した変数。私は試しました

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

しかし、それは動作するようには表示されません。あなたはattr starts withセレクタ使用できるjQueryのを使用して

+0

可能な複製(http://stackoverflow.com/questions/4275071/getelementbyid-wildcard) – Liam

答えて

46

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

をしかし、古いブラウザ用のフォールバックのための(と現代のブラウザを使用して

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

を、あなたはquerySelectorAllと一緒にCSS3 attribute value begins withセレクタを使用することができます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は必要ですか? –

+0

@ ime私は、jQuery、W3C仕様、または現実のブラウザの振る舞いについて、その答えを知らない。しかし、それは機能を傷つけることはできません:) – Phrogz

+0

クール。私はSeleniumを 'self.driver.execute_script(return document.querySelectorAll ...")[0] .click() ' – osa

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のテストは、regexを作成することで、 var lookingFor = new RegExp( '(?:^ | \\ 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

次のことを試してください:[getElementByIdを()ワイルドカード]の

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); 
    } 
} 
関連する問題