2012-04-11 8 views
26

tengo un XSL que crea múltiples elementos con el ID de "CreatedOn" además de un identificador único $Buscar todos los elementos cuya identificación se inicia con una cadena común

Example : createdOnid0xfff5db30 

Quiero encontrar y almacenar estos en una variable usando JavaScript. He intentado

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

pero eso no parece funcionar.

+0

duplicado posible de [getElemenById() comodín] (http://stackoverflow.com/questions/4275071/getelementbyid-wildcard) – Liam

Respuesta

46

Usando jQuery puede utilizar el attr starts with selector:

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

El uso de los navegadores modernos, puede utilizar el selector CSS3 attribute value begins with junto con querySelectorAll:

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

Pero para una reserva para navegadores antiguos (y sin jQuery) necesitarás:

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

¿Es ese '*' -prefijo necesario? –

+0

@ Šime No sé la respuesta, ya sea para jQuery, especificaciones W3C o comportamiento del navegador en el mundo real. Pero no puede dañar la funcionalidad :) – Phrogz

+0

Cool. Hice que Selenium hiciera eso con 'self.driver.execute_script (" return document.querySelectorAll ... ") [0] .click()' – osa

6

Bec Como no etiquetó jQuery, y probablemente no lo necesite, mi sugerencia sería agregar una clase a estos elementos cuando los cree. Luego use la función getElementsByClassName() que está integrada en la mayoría de los navegadores. Para IE que tendría que añadir algo como 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

Probar el className para una clase específica puede ser más fácil y más rápido al crear una expresión regular: ' var buscandoFor = new RegExp ('(?:^| \\ s)' + argumentos [0] + '(?: \\ s | $)'); ... if (buscandoFor.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

intente lo siguiente:

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); 
    } 
} 
Cuestiones relacionadas