2012-06-13 2 views
6

У нас есть букмарклет, и пользователь нажимает кнопку и проверяет, как высокопоставленный человек должен задеть. Мы хотим, чтобы это было кросс-браузер.выделите элемент DOM над мышью, например, проверите

Для этого нам нужно определить элемент DOM во время перемещения мыши, и как только мы получим этот элемент, нам нужно выделить CSS.

У нас есть проблемы с обнаружением элемента DOM движением мыши, можете ли вы провести нас так, как это делается?

Как только у нас есть этот элемент DOM, при щелчке пользователя нам нужно извлечь XPath.

+0

Я исправляя это. –

+0

Вы еще что-нибудь пытались сделать? У вас есть какой-нибудь код? –

+0

Мы нашли, как извлечь XPath тега, см. Мои другие вопросы. –

ответ

19

Вы можете подключить mousemove на document или document.body, а затем использовать target свойство объекта события, чтобы выяснить, верхний элемент мыши находится над. Тогда применение CSS к нему, вероятно, легче всего сделать, добавив к нему класс.

Но мне интересно, если :hover псевдо-класс может спасти вас некоторые проблемы ...

Если вы не используете :hover, вот пример:

(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

Это: класс hover работает для любого элемента HTML dom? И работает ли в каждом браузере? Знаете ли вы, поддерживает ли она более старую версию, такую ​​как FF 3.5 и IE7? –

+0

@IonutFlaviusPogacian: ': hover' действительно работает с любым элементом в IE7 или выше (не в IE6, который поддерживал его только на якорях). Но мне нужно подумать о том, как структурировать CSS. Просто 'body *: hover {...}', вероятно, не сделал бы этого, если вы хотите выделить только верхний элемент *, мышь закончилась ... –

+4

Вот jsfiddle, который мог бы показать что-то подобное http: // jsfiddle.net/MBujm/ Игнорировать jQuery, это не нужно. – Esailija

4

С помощью JQuery вы можете сделать что-то вроде этого

$('*').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; 
    } 
); 

С помощью этого кода в вашем букмарклет, вы можете загрузить то, что когда-либо код

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

Вы знаете, как это делается с помощью простого javascript? Загружать JQuery в букмарклет немного проблематично. –

+0

Я просто отредактировал свой ответ, вы можете использовать код букмарклета для загрузки кода в формате biget, который может содержать jquery и делать то, что вы хотите –

+0

изменить 'yourscripturl' в конце –