2013-01-13 36 views
8

Eşleşen sınıflara sahip bir bağlantı ve bir tablo satırım var. Bağlantı tıklandığında, satırın arka plan rengini aynı sınıfla değiştirmek isterim. Her durumda, aynı sınıfa sahip sadece bir satır olacaktır.Tüm sınıfların arka plan rengini aynı sınıfla değiştirme

İşte şu anki işlevim. İşte

<script type="text/javascript"> 

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

tablo satırı senaryonun bir parçasıdır:

<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> 

tablo satırı iki sınıf vardır ve ben ele ne olması ikincisini (sayı) gerekir.

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

.button, düğme için geçerli değiştirmek istiyoruz sınıf için data-class eklemek için sınıftır: geçerli kod

cevap

8

Birkaç hatalar var. Sen kimlikli sınıfları karıştırılır ve ayrıca class mülkiyet 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> 

Kontrol bu jsfiddle

+1

Bu bana göre en iyi görünüyor, garip id/sınıf karışımı korumak için hiçbir neden yoktur ve jQuery çok basit bir işlem için overkill. – Bubbles

+0

Bu konuda üzgünüm, yanlışlıkla yanlış kod gönderdi. sadece bir son soru ... her satır için atanan iki sınıfa sahip olduğumu fark ettim ... script otomatik olarak ilkini atar ve bu reklamlar bir boşlukla sınırlanır. Bu durumu nasıl halledebilirim? Her zaman ikinci sınıfı bu işleve göndermek istiyorum. –

+0

sadece '' this.className''' yerine '' 'this.className.split ('') [1]' '' – drinchev

4

jQuery bunu kolaylaştırır "Geçersiz veya yasa dışı dize belirtilen" hatası veriyor Arka plan rengi ve data-color, değiştirmek istediğiniz renktir. Ayrıca querySelectorAll() ile jQuery olmadan kolayca yapabilirsiniz

+0

Dinamik yapmak nasıl ilk ben jQuery ancak iki soru ile oldukça yeni duyuyorum aslında? Sınıf isimleri bir betik tarafından oluşturulacak. Ayrıca, "test sonuçları denemeye çalışırken" "bir hata") eksik " –

+1

Güncelleme. Başka bir not: Bir sayfada aynı kimliği kullanmayın. Bu geçersiz. – Mooseman

4

:

<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

harika çalışıyor, teşekkürler! –

İlgili konular