2012-03-05 34 views
45

Tôi biết "getElementsByClassName" không được hỗ trợ bởi IE8. Bạn có biết tôi có thể sử dụng cái gì không? Tôi gặp khó chịu do lỗigetElementsByClassName & IE8: Đối tượng không hỗ trợ thuộc tính hoặc phương pháp này

"Đối tượng không hỗ trợ thuộc tính hoặc phương pháp này".

Mã HTML là:

function sumar() { 
var elems = document.getElementsByClassName('verdana14 toAdd'); 
var myLength = elems.length; 
total = 0; 
for (var i = 0; i < myLength; ++i) { 
    if (elems[i].value!="") { 
     total += parseInt(elems[i].value,10); 
     } 
    } 

var promedio = total/myLength; 
parseFloat(document.getElementById('promediocal').value = promedio.toFixed(2)); 
} 

này văn bản đầu vào mà gọi hàm javascript:

<input name='AE_EA_1_BIV_003_2' type='text' class='verdana14 toAdd' id='AE_EA_1_BIV_003_2' style='width:50px' onChange='sumar()'/> 
<input name='AE_EA_1_BIV_003_3' type='text' class='verdana14 toAdd' id='AE_EA_1_BIV_003_3' style='width:50px' onChange='sumar()'/> 
<input name='AE_EA_1_BIV_003_4' type='text' class='verdana14 toAdd' id='AE_EA_1_BIV_003_4' style='width:50px' onChange='sumar()'/> 
+0

jQuery có một thực hiện lớn CSS selector (trong đó bao gồm tìm kiếm tên lớp): http://jquery.com/ –

+2

Tôi yêu jQuery quá, và cho một cái gì đó chạy IE8 nó gần như chắc chắn sẽ không bị cấm trên đầu, nhưng đối với truy vấn vani thuần túySelectorAll() là câu trả lời tốt nhất, miễn là các không gian tên không có trong hình. – Swanny

Trả lời

0

sử dụng jQuery, hoặc lọc các kết quả từ getElementsByTag

7

Bạn có thể viết của riêng bạn. Một cái gì đó như:

function GEBCN(cn){ 
    if(document.getElementsByClassName) // Returns NodeList here 
     return document.getElementsByClassName(cn); 

    cn = cn.replace(/ *$/, ''); 

    if(document.querySelectorAll) // Returns NodeList here 
     return document.querySelectorAll((' ' + cn).replace(/ +/g, '.')); 

    cn = cn.replace(/^ */, ''); 

    var classes = cn.split(/ +/), clength = classes.length; 
    var els = document.getElementsByTagName('*'), elength = els.length; 
    var results = []; 
    var i, j, match; 

    for(i = 0; i < elength; i++){ 
     match = true; 
     for(j = clength; j--;) 
      if(!RegExp(' ' + classes[j] + ' ').test(' ' + els[i].className + ' ')) 
       match = false; 
     if(match) 
      results.push(els[i]); 
    } 

    // Returns Array here 
    return results; 
} 

Sẽ hoạt động khá tốt, nhưng bạn có thể viết nhanh hơn nếu muốn. Sau đó, bạn chỉ có thể thay đổi:

document.getElementsByClassName('verdana14 toAdd'); 

Để:

GEBCN('verdana14 toAdd'); 
+0

Bạn cần thay đổi 'cn.replace ('', '.')' Vì nó sẽ chỉ thay thế khoảng trắng đầu tiên. Bạn sẽ cần một regex 'g'lobal cũng sẽ xem xét các không gian liền kề là một. Tương tự với 'cn.split (/ /)' của bạn, nó nên là toàn cục và kiểm tra các khoảng trống liền kề, và nó sẽ bao gồm các ký tự khoảng trống khác, như các tab, vì vậy '\ s' có lẽ tốt hơn. –

+0

@amnotiam Cảm ơn vâng tôi đã bị lẫn lộn bởi PHP và quên cái nào thay thế tất cả mà không có sửa đổi g. Tôi cố ý chuyển từ '\ s' sang' 'bởi vì tôi không nghĩ rằng chức năng này sẽ được gọi với các tab hoặc các dòng mới. Tôi đã sửa đổi nó để cắt bỏ dấu cách. – Paulpro

+0

Vâng, có thể là đặt cược an toàn về các tab/dòng mới. –

59

Sử dụng document.querySelectorAll('.verdana14.toAdd').

Cập nhật: FWIW, tôi đã viết một số liên quan blog post.

+1

Điều này sẽ cung cấp giải pháp đơn giản nhất, nhưng bạn phải có 'querySelectorAll' để nhận được nhiều phần tử. –

+1

Cảm ơn, tôi đã sửa lỗi đánh máy bằng cách thay thế qs bằng qsA. –

+0

Tôi đã tải xuống jQuery và tài liệu được sử dụng.querySelectorAll ('. Verdana14.toAdd'); –

14

getElementsByClassName phương pháp không được hỗ trợ bởi IE8.

Bạn nên sử dụng document.querySelectorAll('.classname') (công trình trong IE8 +) hoặc một thư viện mà thực hiện chức năng đó - như:

  • jQuery
  • Moo Tools
  • DOJO
  • YUI
  • Prototype

    ... Trong số những người khác ...


querySelectorAll hỗ trợ:

http://www.quirksmode.org/dom/w3c_core.html#t13

getElementsByClassName hỗ trợ:

http://www.quirksmode.org/dom/w3c_core.html#t11

-3

bạn có thể thử u hát jquery vì nó có bộ chọn lớp thay thế để lấy các phần tử theo tên lớp. $ (". Testclass") mỗi ...nó sẽ cung cấp cho bạn các yếu tố cần thiết theo tên lớp

0

Tôi đã viết thư viện nhỏ này (ít hơn 1kb) sử dụng các phương pháp gốc để lấy các phần tử dom. Nếu bạn kiểm tra phương thức className, bạn sẽ tìm thấy câu trả lời cho câu hỏi của mình.

Find JS on Github

+4

Liên kết của bạn bị hỏng. Tôi biết đây là câu trả lời cũ hơn, nhưng vui lòng đưa giải pháp vào câu trả lời. – psaxton

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