2010-09-17 31 views
19

Có cách nào trong jquery để nghe thay đổi đối với lớp của nút hay không và sau đó thực hiện một hành động nào đó nếu lớp đó thay đổi thành một lớp cụ thể? Cụ thể, tôi đang sử dụng các plugin tab công cụ jquery với trình chiếu và khi trình chiếu đang phát, tôi cần có khả năng phát hiện khi tiêu điểm nằm trên một tab/neo cụ thể để tôi có thể ẩn một div cụ thể.Nghe để thay đổi lớp học trong jquery

Trong ví dụ cụ thể của tôi, tôi cần phải biết khi nào:

<li><a class="nav-video" id="nav-video-video7" href="#video7-video">Video Link 7</a></li> 

thay đổi như sau với lớp "hiện tại" thêm:

<li><a class="nav-video" id="nav-video-video7 current" href="#video7-video">Video Link 7</a></li> 

Sau đó, tôi muốn thôi ẩn một div ở đó chốc lát.

Cảm ơn!

+1

Câu hỏi này [câu hỏi] [1] có thể hữu ích. [1]: http://stackoverflow.com/questions/6034161/how-can-i-detect-when-an-html-elements-class-changes –

Trả lời

2

Dưới đây là một số phát hiện khác có thể cung cấp một giải pháp:

  1. Most efficient method of detecting/monitoring DOM changes?
  2. How can I detect when an HTML element’s class changes?
  3. Monitoring DOM Changes in JQuery

Và như nó đã được đề xuất trong # 2, tại sao không làm cho current một lớp được thêm vào, thay vì một ID và có CSS ​​sau xử lý hành động hiển thị/ẩn.

<style type='text/css> 
    .current{display:inline;} 
    .notCurrent{display:none;} 
</style> 

Cũng có thể đáng để xem xét .on() in jquery.

+2

Google mang tôi đến đây. Tôi nhìn vào ".on()" nhưng không rõ sự kiện nào có thể kích hoạt khi một lớp được thêm vào một phần tử. Tôi đang ở trong tình huống tương tự như OP và cần kích hoạt khi một lớp được thêm vào, nhưng tôi không thể liên kết với sự kiện nhấp chuột ban đầu vì plugin gọi ngăn chặnDefault trên sự kiện nhấp chuột. –

+0

Đã một thời gian kể từ khi tôi đăng câu hỏi này và khá thẳng thắn tôi quên cách tôi xử lý nó. Sử dụng CSS để ẩn/bỏ ẩn một div sẽ là giải pháp hiển nhiên nhưng tôi khá chắc chắn rằng tôi phải có một số điều bổ sung đang diễn ra khiến tôi không giữ nó đơn giản như vậy. Trong mọi trường hợp, tôi đã chọn giải pháp @jsuar vì nó bao gồm một số liên kết hữu ích. – Snazawa

0

Với bất kỳ thứ gì như thế này, bạn có hai lựa chọn về cơ bản, gọi lại hoặc bỏ phiếu.

Vì bạn có thể không thể tạo sự kiện được kích hoạt khi DOM thay đổi theo cách này (đáng tin cậy trên tất cả các nền tảng), bạn có thể phải sử dụng để bỏ phiếu. Để có một chút đẹp hơn về nó, bạn có thể thử sử dụng requestAnimationFrame api thay vì chỉ sử dụng một cái gì đó như setInterval nguyên bản.

Lấy phương pháp cơ bản nhất (ví dụ: sử dụng setInterval và giả jQuery), bạn có thể thử một cái gì đó như thế này:

var current_poll_interval; 
function startCurrentPolling() { 
    current_poll_interval = setInterval(currentPoll, 100); 
} 
function currentPoll() { 
    if ($('#nav-video-7').hasClass('current')) { 
    // ... whatever you want in here ... 
    stopCurrentPolling(); 
    } 
} 
function stopCurrentPolling() { 
    clearInterval(current_poll_interval); 
} 
20

Bạn có thể ràng buộc các sự kiện DOMSubtreeModified. Tôi thêm một ví dụ ở đây:

HTML

<div id="mutable" style="width:50px;height:50px;">sjdfhksfh<div> 
<div> 
    <button id="changeClass">Change Class</button> 
</div> 

Javascript

$(document).ready(function() { 
    $('#changeClass').click(function() { 
    $('#mutable').addClass("red"); 
    }); 

    $('#mutable').bind('DOMSubtreeModified', function(e) { 
     alert('class changed'); 
    }); 
}); 

http://jsfiddle.net/hnCxK/13/

0

Sau khi nghiên cứu này, câu trả lời tốt nhất mà tôi đã tìm thấy là jQuery plugin này được đưa ra trong this SO answer nơi nó liên kết một trình lắng nghe không đúng ion trên bất kỳ thay đổi thuộc tính nào của các phần tử HTML

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