Comments 51
Это горе пошло еще с IE6. Оно так же существует и в IE8.
Как от этого избавиться? Я делаю так.
ссылка
$(«a»).click(function(){
var a = $(this).attr(«href»).toString().split("#")[1];
});
Как от этого избавиться? Я делаю так.
ссылка
$(«a»).click(function(){
var a = $(this).attr(«href»).toString().split("#")[1];
});
Почему-то не прописалось :(
Повторяю через редактор:
Есть HTML код:
<a href=«1»>ссылка</a>
* This source code was highlighted with Source Code Highlighter.
Есть конструкция Jquery:
$(«a»).click(function(){
var a = $(this).attr(«href»).toString().split("#")[1];
});
* This source code was highlighted with Source Code Highlighter.
Повторяю через редактор:
Есть HTML код:
<a href=«1»>ссылка</a>
* This source code was highlighted with Source Code Highlighter.
Есть конструкция Jquery:
$(«a»).click(function(){
var a = $(this).attr(«href»).toString().split("#")[1];
});
* This source code was highlighted with Source Code Highlighter.
Спасибо. как это не странно в ИЕ8 под windows7 мой скрипт сработал правильно… значит возвращается по крайней мере там «1» ))))
За решение огромное спасибо очень интересно!
За решение огромное спасибо очень интересно!
<a href="1">ссылка</a>
не фирштейн. при чем здесь якоря (#) если в статье речь идет об relative ссылке на «страницу» «1»?
зачем сплит? откуда возьмется элемент [1]?
ужас, если используется href='#abc', то работает
$(this).attr('hash')
$(this).attr('hash')
Для надежности надо писать так
a.getAttribute(«href»,2)
тогда там всегда будет то, что положили
a.getAttribute(«href»,2)
тогда там всегда будет то, что положили
угу. из-за этого перевел подобное с href на rel
Получается баг jquery, ее и делали, чтобы везде работало одинаково, ан нет, за всем не уследишь :)
Вы уверены? у меня другие результаты (правда, для иллюстрации я использовал гипотетический пример. реальный код намного сложнее)
jQuery под рукой нету, но код
выдаёт мне полный путь.
<a href="1" onclick="alert(this.href);return false;">ссылка</a>
* This source code was highlighted with Source Code Highlighter.
выдаёт мне полный путь.
Вы много не чисто повторили условия эксперимента…
Нажатие на Ваш вариант возвращает полный путь на тот который был указан в моей статье возвращает в ФФ цифру «1»
<html>
<head>
<script type="text/javascript" src="/jquery.js"></script>
<style>
</style>
<script type="text/javascript">
$(document).ready(function(){
$(".a123").click(function(){
var a = $(this).attr("href");
alert(a);
});
});
</script>
</head>
<body>
<a href="1" onclick="alert(this.href);return false;">ссылка</a>
<a href="1" class="a123" >ссылка1</a>
</body>
</html>
* This source code was highlighted with Source Code Highlighter.
Нажатие на Ваш вариант возвращает полный путь на тот который был указан в моей статье возвращает в ФФ цифру «1»
Поздравляю. А теперь узнайте, что атрибут тега и свойство объекта — 2 большие разницы.
Каким образом это замечание объясняет то, что один браузер возвращает одно а другой другое?
Покопался в jquery.
В случае автора, его проблема в том что в его случае jquery получает значение атрибута через
elem[«href»]
вместо
elem.getAttribute(«href»);
Мобишь вместо этого кода:
Отрабатывается:
Пример =)
В случае автора, его проблема в том что в его случае jquery получает значение атрибута через
elem[«href»]
вместо
elem.getAttribute(«href»);
Мобишь вместо этого кода:
var attr = !jQuery.support.hrefNormalized && notxml && special
// Some attributes require a special call on IE
? elem.getAttribute( name, 2 )
: elem.getAttribute( name );
Отрабатывается:
elem[ name ];
Пример =)
<a id="lin" href="1" onclick="alert(this.getAttribute('href')+' '+this['href']);return false;">ссылка</a>
«Мобишь вместо этого кода: Отрабатывается:»
не могу понят, почему вы так решили? Просмотрел по исходникам (к сожалению, без дебагера), обрабатывается именно elem.getAttribute( name, 2 ).
Автор, может быть закатаете свой пример куда-нибудь на сервер, а то смотреть не из дома очень не удобно?
не могу понят, почему вы так решили? Просмотрел по исходникам (к сожалению, без дебагера), обрабатывается именно elem.getAttribute( name, 2 ).
Автор, может быть закатаете свой пример куда-нибудь на сервер, а то смотреть не из дома очень не удобно?
пожалуйста. test.kamaikin.ru/123.html
Спасибо, как оказалось на этом компьютере эксплорер тупит те только на локальных файлах, так что простите, сегодня ничего не смогу посмотреть.
Ну, собственно вторая ссылка во всех браузерах выводит «1». Получается, топик вообще не верен, или как?
ну проблема есть))) — habrahabr.ru/blogs/jquery/72764/?reply_to=2092003#comment_2088549
мое мнение — habrahabr.ru/blogs/jquery/72764/?reply_to=2092003#comment_2090171
мое мнение — habrahabr.ru/blogs/jquery/72764/?reply_to=2092003#comment_2090171
Первая ссылка всегда полный путь.
Вторая всегда короткий.
Это IE8 в IE7 Mode.
Вторая всегда короткий.
Это IE8 в IE7 Mode.
Немного опечатался =)
p.s. Дорвался до IE8
в quirks mode:
this.getAttribute('href'): 1
this['href']: domain/path/1
this.href: domain/path/1
в ie8 standads:
this.getAttribute('href'): domain/path/1
this['href']: domain/path/1
this.href: domain/path/1
в дебагере кстати в обоих модах аттрибут href = 1
p.s. Дорвался до IE8
в quirks mode:
this.getAttribute('href'): 1
this['href']: domain/path/1
this.href: domain/path/1
в ie8 standads:
this.getAttribute('href'): domain/path/1
this['href']: domain/path/1
this.href: domain/path/1
в дебагере кстати в обоих модах аттрибут href = 1
Это всё от нецелевого использования элемента A (особенно в случае с комментарием second_pilot). Если href ссылается на некий другой документ, то абсолютный адрес выдаст javascript или относительный, в 99% случаев должно быть абсолютно без разницы.
хм… я уже писал, что пример в тексте сильно упрощен для обозначения проблемы.
а реальность…
На странице сайта есть два вида ссылок. внутренние — /data.php
и внешние которые как им и положено начинаются с протокола. При клике мышкой по ссылке я анализирую какая именно ссылка используется, и если внутренняя то пользователю гружу ее аяксом, если внешняя то ничего не делаю))) даю пользователю открыть другой сайт.
В таком случае уже достаточно критично что именно возвращается…
а реальность…
На странице сайта есть два вида ссылок. внутренние — /data.php
и внешние которые как им и положено начинаются с протокола. При клике мышкой по ссылке я анализирую какая именно ссылка используется, и если внутренняя то пользователю гружу ее аяксом, если внешняя то ничего не делаю))) даю пользователю открыть другой сайт.
В таком случае уже достаточно критично что именно возвращается…
Всё равно это не выход. Если Вы укажете внутреннюю ссылку на том же домене, что и ваш сайт, но укажете абсолютно, Ваш скрипт ошибется и сработает неправильно. Вешайте, к примеру, класс «internal» или «ajax» и по нему определяйте.
Тогда должен сработать такой вариант:
$(document).ready(function(){
$("a").click(function(){
var a = $(this).attr("href");
if ((a.indexOf("http") != -1) && (a.indexOf("your domain") == -1)) alert("Внешние")
else alert("Внутренние");
});
});
в IE есть фичи? о_О
Проблем с этим не вижу.
В случаях, когда нужен атрибут «href» его можно использовать и так и так, т.е. как полный путь, так и неполный.
В случаях, когда нужен атрибут «href» его можно использовать и так и так, т.е. как полный путь, так и неполный.
Я все внешние ссылки отбрасываю вот так:
function aClick(anker) {
var href = anker.getAttribute('href');
href = href.replace('http://'+window.location.host, '');
if (href.match(/http:\/\//i)) return true;
$(window).history('add', href);
return false;
}
function aClick(anker) {
var href = anker.getAttribute('href');
href = href.replace('http://'+window.location.host, '');
if (href.match(/http:\/\//i)) return true;
$(window).history('add', href);
return false;
}
Sign up to leave a comment.
интересный баг в ИЕ7 (или фича)