2010-10-15 35 views
8

Làm cách nào để tìm số seq được cung cấp cho id trong ví dụ này?javascript - nhận thuộc tính tùy chỉnh dựa trên id

<table> 
<tr class="row_header thin_border"> 
    </tr><tr id="id33192010101533333" seq="2"> 
    <td>20101015</td> 
    <td>600</td> 
    <td>730</td>   
    <td><a href="#" onclick="deleteActivity(3319,20101015,1);">Click</a></td> 
    <td><a href="#" onclick='selectEditActivity("id3319201010153333");'>Click</a></td> 
    </tr> 

    <tr id="id3319201010151111" seq="3"> 
    <td>20101015</td> 
    <td>600</td> 
    <td>730</td>   
    <td><a href="#" onclick="deleteActivity(3319,20101015,1);"> <img src="/bbhtml/img/deleteAction.png"></a></td> 
    <td><a href="#" onclick='selectEditActivity("id3319201010151111");'><img src="/bbhtml/img/editAction.png"></a></td> 
    </tr> 
<table> 


<script> 
    function selectEditActivity(pass_id){ 
     alert("seq# =:" + ???) 
    } 
</script> 

Trả lời

28

thử này

var id = document.getElementById("divId").getAttribute("attributeId"); 
+3

Có thể thêm rằng bây giờ bạn có thể sử dụng "data-seq" làm thuộc tính tùy chỉnh hợp lệ trong HTML 5 – Kasapo

1

Bạn muốn sử dụng objRef.getAttribute('seq') hoặc lên kế hoạch cũ ký hiệu dấu chấm objRef.seq

+2

Quyền truy cập thuộc tính như 'objRef.seq' sẽ không hoạt động cho thuộc tính tùy chỉnh vì DOM HTML không có ánh xạ giữa chúng. (Ngoại trừ trong IE <8 do lỗi.) Đây là lần duy nhất sử dụng 'getAttribute' trong một tài liệu HTML thực sự là điều đúng. Mặc dù người ta có thể tranh luận rằng các thuộc tính tùy chỉnh nói chung không phải là điều đúng. – bobince

+0

@bobince Sao lưu bằng jsbin và tôi sẽ cung cấp cho bạn một cookie. Tôi không chắc bạn nhận được thông tin đó từ đâu. – epascarello

+0

http: // jsbin.com/ojiyu4/2 - bof/undefined trong tất cả các trình duyệt ngoại trừ IE <9 (Tôi đã nói dối về IE8! Đó là 9 nơi điều này cuối cùng đã được sửa) do lỗi nói trên: IE không hiểu sự khác biệt giữa các thuộc tính và thuộc tính, gây ra nhiều vấn đề nổi tiếng. Nói chung, các thuộc tính DOM là một thứ khác với các thuộc tính và không nên nhầm lẫn: xem xét ví dụ sự khác biệt giữa thuộc tính 'value' (giá trị mặc định đầu vào) và thuộc tính' value' (giá trị hiện tại). – bobince

6

Lấy phần tử DOM và sau đó nhận được seq thuộc tính:

document.getElementById(id).getAttribute('seq'); // note: this will return a string, and getElementById might return null in case there is no element with the given id. 
+0

Tôi rất gần .... \t \t // làm việc này \t \t alert (pass_id) \t \t // làm việc này; \t \t var A = document.getElementById ("id33192010101533333"). GetAttribute ("seq"); \t \t cảnh báo (A); \t \t // nhưng không khi tôi sử dụng biến số \t \t var B = document.getElementById (pass_id) .getAttribute ("seq"); \t \t cảnh báo (B); Bạn chỉ có thể chỉnh sửa nhận xét sau mỗi 5 giây (nhấp vào hộp này để loại bỏ) – robert

+0

Cảm ơn tác phẩm này. – robert

2

thế nào để nhận thuộc tính dựa trên id

Với jQuery:

var seq = $('#id33192010101533333').attr("seq"); 

Without jQuery:

vvar seq = document.getElementById("id3319201010151111").getAttribute("seq"); 

Bạn có thể thử cả hai trong số họ ở this Fiddle.

Cả hai tùy chọn nên hoạt động trong mọi trình duyệt!


gì bạn thực sự muốn

Trước hết, nó tốt hơn để đặt tên tùy chỉnh của bạn thuộc tính data-seq thay vì seq. Tiêu chuẩn HTML5 cho phép các phần tử tùy chỉnh nhưng chỉ xem xét chúng hợp lệ khi tên của chúng bắt đầu bằng data-.

Ngoài ra, bạn không nên đặt trình xử lý nhấp chuột trực tiếp vào CSS của mình. Tốt hơn bạn nên sử dụng thuộc tính class hoặc một số thuộc tính tùy chỉnh data-action có giá trị như edit hoặc delete và sau đó đính kèm trình xử lý sự kiện khi bạn tải xong trang của mình. Sau đó, hãy xem tổ tiên đầu tiên có thuộc tính data-seq và nhận thuộc tính đó.

Là một bản demo cho biết hơn một ngàn lời nói, đây là một bản demo:

var list = document.querySelectorAll('[data-action="delete"]'); 
 
for (var i = 0; i < list.length; ++i) { 
 
    list[i].addEventListener("click", function(e){ 
 
     alert('delete ' + e.target.closest('[data-seq]').getAttribute('data-seq')); 
 
    }); 
 
} 
 

 
var list = document.querySelectorAll('[data-action="edit"]'); 
 
for (var i = 0; i < list.length; ++i) { 
 
    list[i].addEventListener("click", function(e){ 
 
     alert('edit ' + e.target.closest('[data-seq]').getAttribute('data-seq')); 
 
    }); 
 
}
table, td { 
 
    border : 1px solid #333; 
 
} 
 

 
td { 
 
    padding : 10px; 
 
}
<table> 
 
    <tr class="row_header thin_border"></tr> 
 
    <tr id="id33192010101533333" data-seq="2"> 
 
     <td>20101015</td> 
 
     <td>600</td> 
 
     <td>730</td>   
 
     <td><a href="#" data-action="delete">Click</a></td> 
 
     <td><a href="#" data-action='edit'>Click</a></td> 
 
    </tr> 
 
    <tr id="id3319201010151111" data-seq="3"> 
 
     <td>20101015</td> 
 
     <td>600</td> 
 
     <td>730</td>   
 
     <td><a href="#" data-action="delete"> <img src="https://i.stack.imgur.com/mRsBv.png?s=64&g=1"></a></td> 
 
     <td><a href="#" data-action='edit'><img src="https://i.stack.imgur.com/mRsBv.png?s=64&g=1"></a></td> 
 
    </tr> 
 
<table>

Hoặc, nếu bạn thích cách jQuery, bạn có thể thay thế mã JavaScript như sau (đơn giản hơn nhiều) mã:

$('[data-action="delete"]').click(function(e){ 
    alert('delete ' + $(this).closest('[data-seq]').data('seq')); 
}); 

$('[data-action="edit"]').click(function(e){ 
    alert('edit ' + $(this).closest('[data-seq]').data('seq')); 
}); 

Xem thêm this Fiddlethis Fiddle cho bản demo cùng trên J SFiddle, tương ứng không có và với jQuery.

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