2009-04-23 8 views

Répondre

15

Navigateurs modernes: (IE9 +)

//slice turns the resulting DOM collection into a proper array 
var matches = [].slice.call(document.querySelectorAll('[id^=log_]'));

jQuery:

$('[id^=log_]') 

vieux navigateurs, pas jQuery:

var matches = []; 
var elems = document.getElementsByTagName("*"); 
for (var i=0; i<elems.length; i++) { 
    if (elems[i].id.indexOf("log_") == 0) 
    matches.push(elems[i]); 
} 
//matches now is an array of all matching elements. 
+2

Et si vous ne l'utilisez jQuery? : P –

+1

@Daniel, voir la mise à jour ci-dessus. – Tracker1

+2

Votre sélecteur jQuery pourrait être amélioré. Le "star selector" est implicite, vous devriez utiliser le sélecteur "starts-with" au lieu de "contains", et le soulignement n'a pas besoin d'être échappé: '$ (" [id^= log _] ")' –

-1

Il Il serait préférable d'utiliser un JS framework pour y parvenir, car ils disposent de fonctions de sélection DOM avancées qui rendent ce que vous voulez faire incroyablement facile. Il y en a beaucoup à choisir, mais les plus populaires sont jQuery, Prototype, MooTools et Dojo.

3

Ok, voici une réponse JavaScript droite:

// a handy function to aid in filtering: 
// takes an array and a function, returns another array containing 
// only those elements for which f() returns true 
function filter(a, f) 
{ 
    var ret = []; 
    for (var i=0; i<a.length; ++i) 
    { 
    if (f(a[i])) 
     ret.push(a[i]); 
    } 
    return ret; 
} 

// this collects all elements in the current document 
var elements = document.getElementsByTagName("*"); 

// and this filters out all but those that match our pattern 
var logElements = filter(elements, function(el) 
    { return /log_/.test(el.id) }); // simple expression 
Questions connexes