我正在尝试在加载文档之后操作一些锚点,以使用Prototype更改其href属性。根据锚的类,必须重写其href以供跟踪软件使用。
我一起攻击了一些东西但却无法弄清楚它为什么不起作用。它始终返回undefined,而不管我搜索的内容。
<script type="text/javascript">
var elements = $$(".replace");
for (el in elements) {
el.href = "other_href.html";
}
</script>
<a href="this_href.html" class="replace">Link</a>
当我在循环中alert(el)
时,它会返回undefined或(当我搜索a.replace
我页面上甚至不存在的大量元素时。
我的思维错误在哪里?
答案 0 :(得分:2)
未测试:
<script type="text/javascript">
document.observe('dom:loaded', function() {
$$(".replace").each(function(a) {
a.writeAttribute('href', 'other_href.html');
});
});
</script>
<a href="this_href.html" class="replace">Link</a>
我猜你的JavaScript是在浏览器加载它应该操作的HTML之前加载和执行的。它无法操纵尚不存在的东西。这就是观察事件派上用场的地方。在这种情况下,我们正在等待DOM完成加载,但在浏览器呈现页面之前,我们要进行更改。
我还利用了Prototype的each()
功能。这是循环遍历数组和任何枚举的好方法。 writeAttribute()
是一种很好的跨浏览器修改元素属性的方法。