2012-01-26 15 views
1

Следующий код является тестовым образцом. Обычно href в Link указывает на «http://www.google.com/», но attr должен изменить его на ссылку «http://maps.google.com», но ссылка не меняется. Может ли кто-нибудь сказать мне, почему он не работает? БлагодаряИзменение содержимого ссылки href

<html> 
<head> 
<script type="text/javascript"> 
$("a#changeme").attr('href', 
'http:\/\/maps.google.com/'); 
</script> 
</head> 
<body> 
<div class="content"> 
<p>Link to <a href="http://www.google.com/" 
id="changeme">Google</a> 
in the content...</p> 
</div> 
</body> 
</html> 
+0

Почему бы просто не использовать '# changeme' в качестве вашего селектора? Селекторы ID являются самыми быстрыми. Селекторы запускаются в обратном направлении - поэтому сначала находит #changeme, а затем отфильтровывает только привязки .... но зачем это делать, если у вас есть уникальный идентификатор? –

+0

Зачем использовать 'text/javascript'? Все современные браузеры интерпретируют теги скриптов без атрибута 'type' как Javascript. Это очень старая техника. –

ответ

2
  1. JQuery не загружен.
  2. Если бы это было так, вам пришлось бы обернуть его в обработчик $(document).ready.
  3. Это можно сделать без jQuery.

Код:

window.onload = function() { 
    document.getElementById("changeme").href = 'http://maps.google.com/'; 
}; 

Обработчик onload не exactely равно обработчика DOMContentLoaded, но он имеет лучшую поддержку, и может быть предпочтительным здесь. Кроме того, вы можете перемещать <srcipt> блок к концу <body>, а затем использовать метод без onload обработчиков:

<body> 
<div class="content"> 
<p>Link to <a href="http://www.google.com/" id="changeme">Google</a> 
in the content...</p> 
</div> 
<script type="text/javascript"> 
    // This code is placed after the element, so the reference does exist now. 
    // In the head, the same code will throw an error, because the body doesn't 
    // even exist. 
    document.getElementById("changeme").href = 'http://maps.google.com/'; 
</script> 
</body> 
+0

ОК. Так что теперь к сути моей проблемы. Ссылка, которую мне нужно изменить, - это бит XXX в следующем скрипте. –

+0

"XXX бит" в * который * скрипт? –

+0

Сори забыл сценарий, но с тех пор я попробовал то, что вы предлагаете, и я думаю, что он решил мою проблему. Нужно тщательно его проверить. Так что еще раз спасибо. –

0

Сценарий в заголовке, так он выполняется до этого был загружен другой контент (если jQuery даже активен, не видя ссылки на него). Вы должны поместить его в функцию, а затем позвонить позже (например, через onload или таймер). Я мог бы также подумать о функции безопасности в браузере, чтобы сайты не манипулировали ссылками прямо перед тем, как вы нажимаете на них.

+0

Спасибо, да, я понимаю это сейчас. Что такое функция безопасности? –

+0

Я не уверен в этом, но, к примеру, у вас может быть ссылка с надписью «http://www.google.com/» в строке состояния, а вторая вы нажмете «http://www-google-com.fake-site.com/». Но, как уже упоминалось, это скорее связано с тем, как вы написали сценарий (вне функции). – Mario

0

Вот код для правильного способа jQuery для этого (с использованием готового документа).

<html> 
<head> 
<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script> 
<script type="text/javascript"> 
$(document).ready(function() { 
$("#changeme").attr('href', 'http:\/\/maps.google.com/'); 
}); 
</script> 
</head> 
<body> 
<div class="content"> 
<p>Link to <a id="changeme" href="http://www.google.com/">Google</a> 
in the content<a href="test">test</a>...</p> 
</div> 
</body> 
</html> 
Смежные вопросы