2012-12-19 17 views
7

Próbuję zmienić atrybuty id i name na stronie. Kod używam to:Regex z .find(), brak wyników

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

Założenie jest funkcja .find należy podnieść cały id wewnątrz:

id="launch_pad_image_slide_2" 

... ale to nie działa.

5 godzin na tym i wypalony. Propozycje? Zasadniczo za każdym razem, gdy pole jest usuwane, jQuery musi je przeglądać i poprawnie numerować ich atrybuty, aby uniknąć podwójnych wartości.

+1

Co @VisioN opublikował powinno rozwiązać problem, ale dla Przyszłe odniesienie przy użyciu atrybutów przyrostowych nigdy nie jest eleganckim rozwiązaniem, ponieważ prowadzi do problemów, które właśnie przeżyłeś. Zamiast tego użyj elementów o tej samej klasie lub nazwie i przechodź przez nie, albo przez DOM, albo jako tablicę. –

+0

@RoryMcCrossan Gdzie jest twój łuk? :) – VisioN

+0

@VisioN sprawdź czapki w Winter Bash: D –

Odpowiedz

10

selektor jQuery nie obsługuje składni regex. Jednakże, można użyć Attribute Starts With Selector:

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

Innym sposobem jest filter elementy:

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

Spróbuj tego:

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