2010-03-26 40 views
11

Tôi có một hàng trong bảng, và bên trong đó, tôi có một td (bất kể nó là gì). Tôi muốn thay đổi thuộc tính lớp của TR TD của tôi là trong mà không cần sử dụng một ID hoặc một tên. Như thế:Truy cập Javascript TR từ TD

<tr> 
    <td onclick="[TR].setAttribute('class', 'newName')">My TD</td> 
</tr> 

Tôi làm như thế nào?

+2

thẻ dành cho dữ liệu bảng – thecoshman

+2

Thật đáng kinh ngạc khi có bao nhiêu câu trả lời t cho jQuery (mặc dù điều này là * điều đơn giản nhất có thể * để làm ngay cả trong DOM cũ), và sau đó vẫn nhận được cú pháp sai! – bobince

+0

Đó là vì câu trả lời đã được thay đổi sau khi một số câu hỏi đã được đưa ra. – Joop

Trả lời

27

td đứng cho bảng dữ liệu ..

bây giờ .. trong trường hợp của bạn, bạn cần parentNode tài sản của td ..

<tr> 
<td onclick="this.parentNode.setAttribute('class', 'newName')">My TD</td> 
</tr> 

hoặc như bobince đề xuất trong mình nhận xét

<td onclick="this.parentNode.className= 'newName'">My TD</td> 
+0

+1 để giải quyết vấn đề bằng cách sử dụng ID (như yêu cầu được đề cập) hoặc dựa vào Jquery – thecoshman

+0

HOÀN THÀNH! dữ liệu bảng ... Tôi hiểu. Cảm ơn bạn! – arik

+6

'setAttribute ('class')' không hoạt động ngay trong IE6-7. Có rất nhiều thuộc tính mà IE làm cho nó sai: tránh 'getAttribute' /' setAttribute' trong tài liệu HTML vì lý do này. Thay vào đó, hãy sử dụng thuộc tính HTML Cấp 1 của DOM: 'this.parentNode.className = 'newName'' tương thích hơn và dễ đọc hơn. – bobince

-3

jQuery có lẽ là cách dễ nhất để làm điều này, bạn có thể sử dụng bộ chọn như:

$('table.mytable tr').addClass('red'); 

Để thêm một lớp của 'đỏ' cho tất cả của tr trong table.mytable. Đó chỉ là đỉnh của tảng băng trôi - kiểm tra xem nó có nên làm những gì bạn cần không.

+0

Điều đó không thực sự trả lời câu hỏi. Bạn về cơ bản chỉ nói với anh ta để đi tìm cách sử dụng jQuery. Không hữu ích chút nào. –

11

Trong jquery, nó sẽ thực sự đơn giản nếu bạn có tham chiếu đến td của bạn:

$(this).closest('tr'); 

Nếu bạn thực sự không muốn mất một sự phụ thuộc vào jQuery, sau đó bạn có thể chỉ cần làm một vòng lặp nhận parentNode và kiểm tra kiểu của nó như là một giải pháp mục đích chung chung hơn. Trong trường hợp này, bạn chỉ có thể nhận được parentNode vì tr luôn là cha mẹ trực tiếp của td. Bạn có thể làm một cái gì đó như thế này (lưu ý điều này đã không được kiểm tra):

var parent = myTd.parentNode; 
while(true) { 
    if(parent == null) { 
    return; 
    } 
    if(parent.nodeName === "TR") { 
    return parent; 
    } 
    parent = parent.parentNode; 
} 
+0

bạn nhận ra rằng nếu bạn có HTML sau đó tất cả những chia sẻ cùng cha mẹ, họ không được lồng vào dưới mỗi khác. Họ là anh em ruột. – thecoshman

+0

Vâng, tôi đã sửa câu trả lời cần lưu ý rằng bản thân tôi là một kịch bản có mục đích chung hơn. –

+0

Nên là parent.nodeName === "TR" chứ không phải là cấp độ gốc.nodeName = "TD" – Ms2ger

0

Nếu bạn có thể sử dụng jQuery nó có thể là một cái gì đó như thế này

$("yourtdselector").closest("tr").attr("class","classname"); 

Đối với mã của bạn

<tr> 
    <td onclick="changeClass(this,'classname')">My TD</td> 
</tr> 

function changeClass(elem, class) 
{ 
    elem.parentNode.className = class; 
} 
-3

Without bất kỳ khung công tác bổ sung nào:

document.getElementById("theTableName").rows[1].cells[1].className = "someclassname"; 
+2

Đó là không nhận được nó dựa trên một td. –

1

nếu bạn có phần tử dom trong javascript, bạn có thể sử dụng .parentNode() sau đó sẽ cung cấp cho bạn nút perant, mà phải là hàng của bảng. sau đó bạn có thể thiết lập .className

+3

Nó thực sự là parentNode. –

+0

Cảm ơn, đã cập nhật. – thecoshman

+0

trong javascript nó chỉ là: ** document.getElementById ("someTDitem"). ParentNode.style.background = '# 77dd77'; ** – Fattie

Các vấn đề liên quan