2011-03-27 55 views
1

当我注意到一些特殊的行为时,我正在开发一个Web应用程序。我有一个通过JavaScript style属性应用了样式的元素。之后,我尝试用removeAttribute("style")删除应用于该元素的所有样式。这只适用于Gecko。 WebKit什么都不做。WebKit和Gecko之间的风格行为差异

我发现了一种解决方法(在删除属性之前使用setAttribute("style", "")),但我不明白为什么在WebKit上需要setAttribute而不是在Gecko上需要setAttribute。为什么?

我有一个行为示例here尝试对setAttribute行进行注释,看看Gecko和WebKit之间的行为有何不同。

+0

您正在编辑DOM属性,而不是HTML属性。尝试设置'.style.background'为空。而且,将属性设置为空字符串并不是一种可靠的删除方法。 – 2011-03-27 02:18:33

+0

@Matt:我假定更新DOM属性也会更新HTML属性来反映这一点。其次,我将它设置为空,然后*还*删除它,而不是将其设置为空。 – icktoofay 2011-03-27 03:27:08

+0

这不是我第一次见到'removeAttribute'有一个不同于'setAttribute'的空字符串行为;我正在考虑的情况是试图删除内联事件侦听器。 (在这种情况下'setAttribute'导致JavaScript严格警告,所以不理想。) – Neil 2011-03-27 20:59:02

回答

0

难道它取决于你如何设置属性?

var test=document.getElementById("test"); 
//test.style.background="green"; 
test.setAttribute("style", "background: green"); 
test.removeAttribute("style"); 

我注释掉的第二行,因为它是不断变化的特定属性的不同方式。

现在第四行可以在webkit中正常使用(使用谷歌浏览器开发通道),当我将其注释掉时,该框在第三行保持绿色。

+0

准确地说,我知道这取决于我如何设置属性,但我的问题是为什么删除属性不工作,如果它通过'样式“属性? – icktoofay 2011-03-27 03:28:26

+0

它不起作用,因为您没有设置*属性*。你正在设置*属性*。像'id'和'className'这样的一些基本属性会更新两者,但大多数属性不会同时更新属性和属性。在这里看到更多:http://stackoverflow.com/questions/3953028/any-diffrence-between-element-setattribute-elementattr-element-attr/3953642#3953642 – 2011-03-27 03:31:14

+0

@Matt:有趣的是,如果我把' alert(test.getAttribute(“style”));'在它用'style'属性设置某个东西后,它显示该属性已被适当更新。它也似乎使'removeAttribute'按预期工作(像'setAttribute'),这本身就是意想不到的。 – icktoofay 2011-03-27 03:40:28