2012-06-13 32 views
6

Chúng tôi có một bookmarklet và người dùng nhấp vào nút và kiểm tra như highligther cần phải khởi động. Chúng tôi muốn đây là trình duyệt chéo.làm nổi bật phần tử DOM trên chuột, như kiểm tra

Vì điều này, chúng tôi cần phát hiện phần tử DOM trong khi di chuyển chuột và khi chúng tôi có yếu tố này, chúng tôi cần đánh dấu bằng CSS.

Chúng tôi gặp sự cố khi phát hiện phần tử DOM bằng cách di chuyển chuột, bạn có thể hướng dẫn chúng tôi cách thực hiện điều này không?

Khi chúng tôi có phần tử DOM này, khi người dùng nhấp vào, chúng tôi cần trích xuất XPath.

+0

Tôi đang sửa chữa này. –

+0

Bạn đã thử mọi thứ chưa? Bạn có mã nào không? –

+0

Chúng tôi đã tìm thấy cách trích xuất XPath của thẻ, xem các câu hỏi khác của tôi. –

Trả lời

19

Bạn có thể móc mousemove trên document hoặc document.body, sau đó sử dụng thuộc tính target của đối tượng sự kiện để tìm ra phần tử trên cùng của con chuột. Sau đó áp dụng CSS cho nó có lẽ dễ dàng nhất được thực hiện bằng cách thêm một lớp vào nó.

Nhưng tôi tự hỏi, nếu psuedo-class :hover có thể giúp bạn tiết kiệm một số rắc rối ...

Nếu không sử dụng :hover, đây là một ví dụ:

(function() { 
    var prev; 

    if (document.body.addEventListener) { 
    document.body.addEventListener('mouseover', handler, false); 
    } 
    else if (document.body.attachEvent) { 
    document.body.attachEvent('mouseover', function(e) { 
     return handler(e || window.event); 
    }); 
    } 
    else { 
    document.body.onmouseover = handler; 
    } 

    function handler(event) { 
    if (event.target === document.body || 
     (prev && prev === event.target)) { 
     return; 
    } 
    if (prev) { 
     prev.className = prev.className.replace(/\bhighlight\b/, ''); 
     prev = undefined; 
    } 
    if (event.target) { 
     prev = event.target; 
     prev.className += " highlight"; 
    } 
    } 

})(); 

Live copy | source

+0

Điều này: lớp di chuột không hoạt động với bất kỳ phần tử dom HTML nào? Và không hoạt động trong mọi trình duyệt? Bạn có biết nếu nó được hỗ trợ bởi phiên bản cũ hơn như FF 3.5 và IE7? –

+0

@IonutFlaviusPogacian: ': hover' thực sự làm việc với bất kỳ phần tử nào trong IE7 hoặc cao hơn (không phải trong IE6, chỉ hỗ trợ nó trên neo). Nhưng tôi phải suy nghĩ kỹ về cách cấu trúc CSS. Chỉ cần 'body *: hover {...}' có thể sẽ không làm điều đó, nếu bạn muốn chỉ làm nổi bật phần tử * trên cùng * của con chuột ... –

+4

Đây là một jsfiddle có thể hiển thị một cái gì đó tương tự http: // jsfiddle.net/MBujm/ Bỏ qua jQuery, nó không cần thiết. – Esailija

4

Với sự giúp đỡ của jquery bạn có thể làm một cái gì đó như thế này

$('*').hover(
    function(e){ 
     $(this).css('border', '1px solid black'); 
     e.preventDefault(); 
     e.stopPropagation(); 
     return false; 
    },function(e){ 
     $(this).css('border', 'none'); 
     e.preventDefault(); 
     e.stopPropagation(); 
     return false; 
    } 
); 

Với mã này trong bookmarklet của bạn, bạn có thể tải những gì bao giờ hết đang

javascript:function loadScript(src){f=document.createElement('script');if(f){f.setAttribute("type","text/javascript");f.setAttribute("src",src);document.getElementsByTagName("head")[0].appendChild(f);}};loadScript("yourscripturl"); 
+1

Bạn có biết điều này được thực hiện với javascript đơn giản không? Đó là một chút vấn đề để tải JQuery trong một bookmarklet. –

+0

Tôi chỉ chỉnh sửa câu trả lời của mình, bạn có thể sử dụng mã dấu trang để tải mã biget có thể chứa jquery và làm bất cứ điều gì bạn muốn –

+0

thay đổi 'yourscripturl' ở cuối –

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