2013-01-13 10 views
8

Mam łącze i wiersz tabeli, które mają pasujące klasy. Po kliknięciu łącza chciałbym zmienić kolor tła wiersza z tą samą klasą. Dla każdego przypadku będzie tylko jeden wiersz z tą samą klasą.Zmiana koloru tła wszystkich elementów o tej samej klasie

Oto moja aktualna funkcja.

<script type="text/javascript"> 

function check(x) { 
    elements = document.getElementsByClassName(x); 
    for (var i = 0; i < elements.length; i++) { 
     elements[i].bgColor="blue"; 
    } 
} 
</script> 

Oto część skryptu wiersza tabeli:

<tr class="alt1 12"> 
<td width="50" height="55"> 
<img src="iPhone/statusicon/12.png" alt="" id="forum_statusicon_12" border="0"></td> 
<td> 
<div class="forumtitle"> 
<a class="forumtitle 12" href="forumdisplay.php?f=12" action="async" onclick="check(this.className.split(' ')[1])">News and Current Events</a></div> 
</td> 
<td width="25"> 
<div class="forumarrow"><img src="iPhone/chevron.png" alt="" border="0"></div> 
</td> 
</tr> 

wiersz tabeli ma dwie klasy, a ja potrzebuję drugi (liczba), aby być tym, czym jest skierowana. Obecny kod daje błąd „nieprawidłowy lub nielegalny łańcuch został określony”

Odpowiedz

8

Masz kilka błędów. Ty mieszane zajęcia z identyfikatorami, a także właściwość class jest rzeczywiście className

<script type="text/javascript"> 

function check(x) { 
    elements = document.getElementsByClassName(x); 
    for (var i = 0; i < elements.length; i++) { 
     elements[i].style.backgroundColor="blue"; 
    } 
} 

</script> 

<a href="#" class="first" onclick="check(this.className)">change first row</a> 
<a href="#" class="second" onclick="check(this.className)">change second</a> 
<!--  FIX (id -> class)    FIX (class -> className) --> 
<table> 
<tr class="first"> 
<td>test1</td> 
</tr> 


<tr class="second"> 
<!--FIX (id -> class) --> 
<td>test2</td> 
</tr> 
</table> 

Sprawdź to jsfiddle

+1

Wydaje mi się to najlepsze, nie ma powodu, aby zachować dziwny miks id/class, a jQuery jest przesadą dla tak prostej operacji. – Bubbles

+0

Przepraszam za to, nieumyślnie wysłałem zły kod. tylko jedno ostatnie pytanie ... zdałem sobie sprawę, że mam dwie klasy przypisane do każdego wiersza ... skrypt automatycznie przypisuje pierwszy, a ten reklamuje inny ograniczony spacją. jak mogę sobie z tym poradzić? zawsze chcę wysłać drugą klasę do tej funkcji. –

+0

po prostu zamień '' 'this.className''' na' 'this.className.split ('') [1]' '' – drinchev

4

jQuery upraszcza go:

$(".button").click(function(){ 
var class = $(this).attr("data-class"); 
var color = $(this).attr("data-color"); 
$("."+class).css("background-color",color); 
}); 

.button jest klasa zastosować do przycisku, dodać data-class dla klasy, którą chcesz zmienić kolor tła, a data-color to kolor, który chcesz zmienić.

+0

Jestem całkiem nowy z jQuery, ale dwa pytania, po pierwsze, jak mogę zrobić to dynamicznie? Wszystkie nazwy klas zostaną utworzone przez skrypt. Ponadto pojawia się błąd ") brakujący po liście parametrów" przy próbie przetestowania go. Aktualizacja: –

+1

. Kolejna uwaga: nie używaj tego samego "id" wiele razy na stronie. Jest nieważny. – Mooseman

4

Można również zrobić to łatwo bez jQuery z querySelectorAll():

<script type="text/javascript"> 

function check(selector) 
{ 
    var elements = document.querySelectorAll(selector); 
    for (var i = 0; i < elements.length; i++) { 
     elements[i].style.backgroundColor = "blue"; 
    } 
} 
</script> 

<a href="#" class="first" onclick="check('.' + this.className)">change first row</a> 
<a href="#" id="second" onclick="check('#' + this.id)">change second</a> 

<table> 
<tr class="first"> 
    <td>test1</td> 
</tr> 


<tr id="second"> 
    <td>test2</td> 
</tr> 
+0

działa świetnie, dzięki! –

Powiązane problemy