Можно ли определить адрес ссылки под курсором?
кто нибудь знает, возможно ли определить 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, время: 18:47. |