2011-08-23 162 views
1

我一直在尝试使用setAttribute将选择标记的名称从oldName更改为newName,但是当我加载页面然后查看源代码时,oldName仍然存在。最终,我想添加一个属性“onchange”,“function();”但我甚至无法让JS更改标签的名称。任何帮助,将不胜感激。提前致谢。我在Mac OS X上测试了这一点:Chrome,FF和Safari。JavaScript setAttribute不起作用

<html> 
<head> 
</head> 
<body> 
     <select name="oldName"> 
     <option value="0">Essay 1</option> 
     <option value="1">Essay 2</option> 
     <option value="2">Essay 3</option> 
     </select> 
<script type="text/javascript"> 
document.getElementsByTagName("select").item(0).setAttribute("name","newName"); 
</script> 
</body> 
</html> 
+2

源不会更改,所有js更改都是在DOM表示上完成的。测试更改使用萤火虫或铬开发工具 – Einacio

+0

在我的铬13工作正常。[演示](http://jsfiddle.net/CJjYH/) –

回答

-3

为什么你不使用类呢?像这样:

<script type="text/javascript"> 
$(function(){ 
    $('.example').attr('name','new'); 
}); 
</script> 


<select class="example" name="oldName"> 
<option value="0">Essay 1</option> 
<option value="1">Essay 2</option> 
<option value="2">Essay 3</option> 
</select> 
+0

这是jQuery,本机DOM元素没有'.attr' 。另外,将函数结果设置为某些内容是没有意义的。 – pimvdb

+0

这看起来像是纯JS和jQuery之间的混合体,并且由于没有jQuery对象,因此您将尝试调用它的对象不存在“attr”。正如@pimvdb指出的那样,您不希望将字符串“newName”分配给该函数。 –

+0

同意 - 这是无效的。请确保您的答案在发布之前包含事实信息 - 谢谢! –

4

您的代码工作,名称更改。查看源代码时,您不会看到名称更改。请在开发工具中查看生成的源代码。 (在Chrome中尝试F12)。

查看源只显示首次从服务器下载的源。使用开发工具,您可以看到页面加载后对DOM所做的更改。

+1

谢谢!你是对的。我不知道为什么我认为只查看源代码会显示更新的版本。 – Usman

+0

@Usman不客气:) – Paulpro

0

当您执行“查看源代码”时,您不会查看该页面的HTML,因为它存在于您的面前 - 浏览器会专门提取该页面的副本以显示源代码。这样做时,它不会解释JavaScript - 因此,通过javascript制作的文档的任何更改都不会反映在“查看源代码”窗口中。

为了查看DOM 的变化,您将不得不使用像Firebug(link)这样的开发工具。当然,作为Firefox的扩展意味着在Internet Explorer中没有运气,这就是为什么开发人员经常将Firefox作为开发目标并在所有事情都合理运行后担心Internet Explorer的原因。

在IE中有Firebug的替代工具(如Firebug Lite),但没有一个接近功能和实用程序。