2013-07-03 37 views
10

Tôi có hàm ajax nhận một số giá trị dựa trên giá trị đã chọn trong menu thả xuống. Tôi đang cố gắng bật/tắt một số trường dựa trên chuỗi con. Tôi thấy 'chứa' để làm việc trong firefox, nhưng thử nghiệm trong Chrome và Safari nói với tôi rằng những đối tượng 'không có phương pháp chứa'jQuery: contains() hoạt động trong Firefox nhưng không phải Chrome/Safari

if ($d.attr("embed").contains('$var_2$')) { 
    //do something 
} else { 
    // do something else 
} 

Có một thay thế cho chứa sẽ làm việc trong tất cả các trình duyệt?

Trả lời

18

những gì bạn đang sử dụng ở đó là String.contains, không phải jQuery.contains. điều này là bởi vì bạn đang sử dụng hàm trên giá trị trả về của .attr, đó là một String, không phải là một đối tượng jQuery.

sử dụng jQuery.contains() (mà làm việc qua trình duyệt), bạn có thể làm điều này thay vì:

$d.contains('$var_2$') 

nhưng lưu ý rằng điều này sẽ không chỉ tìm kiếm trong các thuộc tính quy định nhưng toàn bộ yếu tố để thay thế.

vì vậy những gì bạn có khả năng nhất muốn làm là sử dụng String.indexOf() (mà cũng làm việc qua trình duyệt):

$d.attr("embed").indexOf('$var_2$') != -1 
+0

Cảm ơn đã giải thích kỹ lưỡng, mà làm việc! Tôi đã thấy indexOf được đề xuất như là một thay thế và đã thử nó nhưng cú pháp của tôi phải được tắt vì tôi không nhận được kết quả mong muốn. Hoạt động hoàn hảo với cú pháp đã cho của bạn. Cảm ơn một lần nữa. – richj

+0

bạn được chào đón. – oezi

+0

Chỉ cần cập nhật cho câu trả lời này: Mozilla devs quyết định đổi tên phương thức đó thành 'includes' trong Firefox 48 cho ES 6 và các lý do tương thích. – beendr

3

Bạn có thể sử dụng indexOf, nó sẽ hoạt động trong tất cả các trình duyệt.

if ($d.attr("embed").indexOf('$var_2$') > -1) { 
    //do something 
} else { 
    // do something else 
} 
Các vấn đề liên quan