2010-09-20 35 views
15

cố gắng xác định phương pháp duyệt web chéo, phong nha để có được thuộc tính với javascript? giả sử sử dụng thư viện javascript (jQuery/Mootools/etc.) không phải là một tùy chọn.Trình duyệt chéo, phương thức javascript getAttribute()?

Tôi đã thử những điều sau, nhưng tôi thường xuyên nhận được "thuộc tính" là null hoặc không phải là lỗi đối tượng khi IE cố gắng sử dụng phương thức "khác". Bất cứ ai có thể hỗ trợ?

<script type="text/javascript"> 
//... 
    getAttr: function(ele, attr) { 
     if (typeof ele.attributes[attr] == 'undefined'){ 
     return ele.getAttribute(attr); 
     } else { 
     return ele.attributes[attr].nodeValue; 
     } 
    }, 
//... 
</script> 


<div> 
<a href="http://www.yo.com#foo">Link</a> 
</div> 

sử dụng html ở trên, trong mỗi trình duyệt, làm thế nào tôi getattr (ele, 'href')? (giả sử chọn nút ele không phải là vấn đề)

Trả lời

10

liên quan đến bản cập nhật của câu hỏi của bạn Với, bạn có thể thử này.

Có thể quá mức cần thiết, nhưng nếu getAttribute() và ký hiệu dấu chấm không trả lại kết quả, nó lặp lại đối tượng attributes để tìm cách khớp.

Ví dụ:http://jsfiddle.net/4ZwNs/

var funcs = { 
    getAttr: function(ele, attr) { 
     var result = (ele.getAttribute && ele.getAttribute(attr)) || null; 
     if(!result) { 
      var attrs = ele.attributes; 
      var length = attrs.length; 
      for(var i = 0; i < length; i++) 
       if(attrs[i].nodeName === attr) 
        result = attrs[i].nodeValue; 
     } 
     return result; 
    } 
}; 

var result = funcs.getAttr(el, 'hash'); 

Đó là tùy thuộc vào bạn để làm một số xét nghiệm qua trình duyệt, mặc dù. : O)


Sử dụng ele.attributes, bạn cần phải truy cập chúng bằng chỉ số, như trong:

ele.attributes[0].nodeName; // "id" (for example) 
ele.attributes[0].nodeValue; // "my_id" (for example) 

Đang cố gắng để vượt qua attributes một tên thuộc tính xuất hiện trở lại một giá trị mà typeofobject, vì vậy bạn Mã else đang chạy mặc dù ele.attributes[attr] không cung cấp cho bạn giá trị bạn muốn.

+0

Tôi đã cập nhật câu hỏi cụ thể hơn một chút. Làm thế nào tôi có thể chỉ định rằng tôi muốn attr "href" hoặc "băm" sử dụng phương pháp của bạn? – tester

+0

@tester - Tôi sẽ cập nhật sau một phút. – user113716

+0

hoạt động tốt trong Chrome/FF, thử nghiệm trong IE8, tôi nhận được: Đối tượng không hỗ trợ thuộc tính hoặc phương pháp này trên dòng này: var result = ele.getAttribute (attr) || ele [attr] || vô giá trị; – tester

5

Bạn đang cố gắng truy cập các thuộc tính của ele trước khi bạn đã thiết lập nếu các thuộc tính đó tồn tại. Hãy thử loại này của chuỗi bằng chứng:

if (ele.attributes && ele.attributes[attr] && typeof ele.attributes[attr] == 'undefined') 

, vv

+0

tôi cho rằng sẽ loại bỏ lỗi của tôi (và cảm ơn), nhưng làm thế nào nói tôi đã sử dụng phương thức $ .getAttr ($ anchor, 'href'); làm cách nào để lấy href từ một số trong IE6-8? – tester

+0

Xin lỗi, tôi không chắc bạn đang hỏi gì. – Robusto

+0

Tôi đã cập nhật phần cuối của câu hỏi để chỉ định nội dung tôi đang cố gắng truy cập (href của liên kết đã chọn) – tester

16

Đối với phần lớn các trường hợp, bạn có thể chỉ cần sử dụng chức năng được xây dựng trong getAttribute.

ví dụ:

ele.getAttribute(attr) 

Theo QuirksMode này nên làm việc trên tất cả các trình duyệt chính (IE> = 6 kèm theo), với một ngoại lệ nhỏ:

Trong IE5-7, truy cập vào thuộc tính style cho một đối tượng, và truy cập vào Thuộc tính onclick cung cấp chức năng ẩn danh được bao quanh nội dung thực tế.

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