Можно ли определить адрес ссылки под курсором?
кто нибудь знает, возможно ли определить URL ссылки под курсором?
|
- событие onmouseover
- свойство href объекта события (e.srcElement - для IE, e.taget - для не-IE, где e - объект события) |
можно,
но смысла в этом раньше не было. |
Попробуйте что-то вроде такого. Правда нужно правильно приаттачивать событие и проверять что это действительно ссылка.
function getHrefLink(e) { var link = e.target || e.srcElement; alert(link); } var links = document.getElementsByTagName("A"); for(var i in links) { links[i].onmouseover = getHrefLink; } |
1. Вы получаете элемент из события различным способом для FF и IE, но забыли само получение объекта события распараллелить :)
e = window.event || e; 2. Так как событие вешается на каждый A и через on-атрибут, то вообще srcElement нет надобности получать - он будет this в функции. 3. А лучше не вешать обработчики на всё подряд, перебивая к тому же, возможно, уже существующие у каждого элемента, а повесить один: (function() { function handler(e) { e = e || window.event; var target = e.target || e.srcElement; if (target.tagName != "A") { return true; } var href = target.getAttribute("href"); alert(href); return true; } if (window.addEventListener) { window.addEventListener("mouseover", handler, false); } else if (window.attachEvent) { document.body.attachEvent("onmouseover", handler); } else { window.onmouseover = handler; } })(); |
vasa_c,
Верно, моя ошибка. Не всегда получается вникнуть в проблему и быстро написать правильный код. :) |
Спасибо всем, особенно vasa_c,
скрипт работает:) правда в опере работает, а вот в IE6.0 почемуто alert не вылазиет:confused: |
на обычные ссылки твой скрипт реагирует
а на форматированные-нет пример: <a href='http://PKSoft.W6.ru'> Ссылка </a><br> <a href='http://PKSoft.W6.ru'><b>Ссылка<b></a><br> |
ну добавь в код поиск родителя с тэгом A.
|
<b><a href="">Сцылко</a></b> ?
|
PK.Kirill,
Либо форматируйте ссылки с помощью стилей CSS, либо нужно будет писать довольно неприятный алгоритм. Событие-то срабатывает при наведении на ссылку, но "target" возвращает элемент, над которым курсор, а у вас элемент <b> "перекрывает" элемент <a>, т.е находится над ним. |
var links = document.getElementsByTagName("A"); for(var i = 0, l = links.length; i < l; i++) (function(link) { link.onmouseover = function() { alert(link.href); } })(links[i]); |
Зачем здесь делать кучу замыканий, если можно использовать this.href? :)
|
vasa_c,
Потому что тогда нужно будет прописывать к каждой ссылке функцию по onClick с параметром this, иначе this будет указывать на window. Т.е вот так: mylink.onclick = function(this){...} Сделать нельзя. |
vasa_c, да, действительно.
function getHref() { alert(this.href); } var links = document.getElementsByTagName("A"); for(var i = 0, l = links.length; i < l; i++) link.onmouseover = getHref; |
Андрей Параничев, все обработчики событий вызываются в контексте DOM-элемента, за исключением глюка IE+appendChild, где this указывает на window.
|
vasa_c,
Ясно, значит я ошибся. |
Часовой пояс GMT +3, время: 17:42. |