2012-12-19 17 views
7

Sto tentando di modificare gli attributi id e name in una pagina. Il codice che sto utilizzando è questo:Regex con .find(), nessun risultato

var img = new RegExp('id*="launch_pad_image_slide_\d"', g) ; 
$('.slider-data').each(function(){ 
    $(this).find(img).attr('id', 'random stuff'); 
});    

Il presupposto è la funzione .find dovrebbe prendere tutta la id interna:

id="launch_pad_image_slide_2" 

... ma non funziona.

5 ore su questo e bruciato. Suggerimenti? Fondamentalmente ogni volta che un campo viene cancellato, jQuery deve eseguirne il looping e numerarne gli attributi id/name correttamente per evitare i doppi.

+1

Cosa @VisioN ha pubblicato dovrebbe risolvere il problema, ma per riferimento futuro utilizzando attributi incrementali non è mai una soluzione elegante in quanto conduce a problemi come quello che hai appena vissuto. Invece, usa gli elementi con la stessa classe o nome e li attraversa, attraverso il DOM o come una matrice. –

+0

@RoryMcCrossan Dov'è il tuo arco? :) – VisioN

+0

@VisioN guarda i cappelli in Winter Bash: D –

risposta

10

Il selettore jQuery non supporta la sintassi di regex. Tuttavia, è possibile utilizzare Attribute Starts With Selector:

$(this).find("[id^='launch_pad_image_slide_']").prop("id", "random stuff"); 

Un altro modo è quello di filter elementi:

$(this).find("[id]").filter(function() { 
    return /^launch_pad_image_slide_\d$/.test(this.id); 
}).prop("id", "random stuff"); 
1

Prova questo:

$('img').each(function(){ 
      if ($(this).attr('id').indexOf("launch_pad_image_slide_") >= 0) 
       $(this).attr('id',Math.random()); 
    }); 
Problemi correlati