- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如何在 IE6 中使用 javascript 设置元素属性?似乎 setAttribute
不起作用。我真的需要即时进行。谢谢。
代码
<script type="text/javascript" language="javascript">
menuItems = document.getElementById("menu").childNodes;
for (i = 0; i < menuItems.length; i++)
{
if (menuItems[i].className != "blue")
menuItems[i].setAttribute('onmouseover', 'HoverMenu(this)');
}
</script>
最佳答案
(以下大部分是在 OP 澄清他们正在设置事件处理程序之前;留下其他问题列表以防其他人发现它们有用)
IE6 把 setAttribute
的几个方面弄得一团糟。不知道你正在处理的确切问题(这是在编辑之前表明它是一个事件处理程序),很难确定这是否真的是问题所在,但这里有几个已知问题:
setAttribute
来设置事件处理程序最好使用反射属性或 addEventListener
设置事件处理程序[标准]/attachEvent
[IE],而不是 setAttribute
(您不能在 IE 上使用 setAttribute
)。
因此,任何这些都可以工作:
// Using reflected property
theElement.onclick = yourFunction;
// Using DOM2 standard addEventListener; note it's "click", not "onclick"
theElement.addEventListener("click", yourFunction, false);
// IE's non-standard alternative to addEventListener
theElement.attachEvent("onclick", yourFunction);
...不是
// This doesn't work on IE (at least)
theElement.setAttribute("onclick", "yourFunction();");
addEventListener
/attachEvent
这样做很酷还有其他原因:你可以在一个事件的同一个事件上有多个事件监听器元素。您不能使用反射属性来做到这一点。
因此针对您的具体情况:
menuItems = document.getElementById("menu").childNodes;
for (i = 0; i < menuItems.length; i++)
{
if (menuItems[i].className != "blue") {
menuItems[i].onmouseover = function() {
HoverMenu(this);
}
}
}
类
设置类属性的正确方法是使用反射属性className
:
// Correct, cross-browser way. Works on IE6+, all versions of
// Chrome, etc. Completely reliable.
theElement.className = "new set of classes";
或者在现代浏览器(所以,不是 IE6!)上,您可以使用 classList
。
IE6 的许多 setAttribute
错误之一是它不起作用:
// Should also work, but fails on IE6 (and probably some other old versions)
theElement.setAttribute("class", "new set of classes");
相反,IE6(可能还有其他几个版本)让您使用 "className"
而不是 "class"
,尽管这毫无意义。反射的 property 的名称为 className
因为它曾经是 JavaScript 中的名称,您不能使用保留字(如 class
或 for
或 if
) 作为属性文字(obj.class
无效)。一段时间以来情况并非如此(ECMAScript 5 修复了它),但这就是反射(reflect)的属性是 className
而不是 class.
但由于 setAttribute
接受一个 string,它应该接受属性的正确名称。事实上它不只是一个 IE 错误(如果他们不在 [in] 兼容模式下,他们已经在现代版本的 IE 中修复了一个错误)。
为
类似地,要设置 for
属性(例如,在 label
上),可以使用 htmlFor
反射属性:
// Correct, cross-browser way. Works on IE6+, all versions of
// Chrome, etc. Completely reliable.
theLabel.htmlFor = "id-of-field";
在任何未损坏的浏览器上,您还可以使用 setAttribute
:
// Should also work, but fails on IE6 (and probably some other old versions)
theLabel.setAttribute("for", "id-of-field");
...但不是在 IE6 上,它需要 "htmlFor"
而不是 "for"
出于同样的原因它需要 "className"
而不是 "class"
(例如,因为它坏了)。
This page有相当多的 IE 有问题的属性。
setAttribute
不能用来设置style
属性...您必须改用style
属性;但公平地说,这通常是一种更方便的方式。示例:这不适用于 IE:
theElement.setAttribute("style", "color: blue"); // Doesn't work on IE
...但这将:
myElement.style.color = "blue";
JavaScript 库,如 Prototype , jQuery , Closure , 或 any of several others如果您浏览浏览器的 API,将使上述大部分内容变得更容易并消除浏览器之间的差异。
关于javascript - setAttribute 在 IE6 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3163212/
request.setAttribute 和 request.getSession().setAttribute() 有什么区别? 它们存储在哪里以及以什么格式? 最佳答案 区别: 当您使用reque
session.setAttribute 和 request.setAttribute 有什么区别? 最佳答案 范围,session属性住所有的session而request属性只在一个请求中 关于j
我一直热衷于重置我的一个 jsp 页面上的一些验证错误。这是一个我无法再联系到的人(死亡或无法联系)继承的项目。我有一个 jsp 页面,其中包含许多自定义标记库,其中更多页面被添加为选项卡,父页面具有
当您从请求和 getServletContext() 调用它们时,get/setAttribute() 之间有什么区别。我注意到你需要 RequestDispatcher rd = request.g
所以我正在学习操作 DOM,并且我注意到一件有趣的事情: 假设我想使用“.”设置元素的 name 属性。点符号: element.name = "someName"; console.log(docu
HttpServletRequest类的setAttribute()方法和HttpSession类的setAttribute()方法有什么区别? 在什么情况下使用? 最佳答案 一个在请求范围内设置一个
为什么我们要使用setAttribute()方法来设置ServletContext参数,因为我们可以通过在web.xml中设置参数并使用getInitParameter()来获取它们来完成相同的工作?
我在 setAttribute() 方面遇到问题。我已经搜索过互联网和这个网站,但他们没有解决我的问题。我想用 javascript 更改图片的宽度和高度,但它不起作用。请帮助我。
在学校,我的老师将我的代码更改为下面的示例它不起作用,我无法理解它是如何工作并修复它的。 function _$(e, attrs) { var el = document.createEle
我有三个元素,我正在尝试为每个元素设置属性: const foldable = document.getElementsByClassName('foldable') let result = Arr
我正在尝试使用 object3D.lookAt 属性更改图像的视角。目前我正在尝试使用组件的 update() 方法更改图像的方向。这是通过更新我的组件的 Lookat 属性来实现的。 functio
我有一些有效的 SVG 代码,可以通过在形状上设置属性来处理鼠标事件: function plot() { ... shape.setAttributeNS(null, "onmouseove
我使用的表单会根据您单击单选按钮的选项来显示一些 div。 问题是 div 设置为不显示,除非我选择一个选项。 所以我添加了以下函数,以确保如果显示 div,它将具有具有所需属性的形式。 所以我给出这
此代码嵌套在 ascx 控件中。 onclientclick 事件有效并且没有错误,但标签文本没有更改?我错过了什么?
同样,我在使用 setAttribute 时遵循我的引用书和在线引用:它根本不起作用; HTML:
这是一些 HTML: lorem Lorem, ipsum dolor sit amet consectetur adipisicing elit. Eaque magnam expedit
我一直在以不同的方式创建元素,但不确定最佳方法。有什么区别: var myselect = document.createElement("select"); myselect.name="blah"
这里我稍微修改了代码 https://www.w3schools.com/jsref/tryit.asp?filename=tryjsref_doc_getelementsbyname_loop 来自
我在为另一个元素设置属性时遇到问题。 我正在使用带有 JS 和 HTML 的 PHP 代码,它看起来像: $value 你一定知道我有两个元素。我用于编写文本的第一个('content')和另一个('
我是 Javascript 的新手,我不知道如何在选定的选项上使用 setAttribute。 我的 html 中有一个 id = employee 的 select 元素(使用 javascript
我是一名优秀的程序员,十分优秀!