IE11 bug - 调用 javascript getAttributeNode 方法会制动 mergeAttribu
IE11 bug - calling javascript getAttributeNode method brakes mergeAttributes
最近在IE=7模式下更新IE(11.0.27)后,javasrcipt中有一些非常奇怪的行为,在以前的版本中,下面的脚本按预期工作(包括IE8-IE11.0.24)。
所以它是由调用 Element.getAttributeNode('class') 引起的,在对元素进行此调用后,如果您尝试将其属性与另一个元素合并,该元素将抛出错误(未指定错误) 元素.mergeAttributes 方法。
演示(仅当开发工具/控制台关闭并在当前 IE11 版本的 IE-7 模式下发生):链接
问题:有没有办法避免这种情况,对于上述方法,是否有其他方法?问题是这两种方法被mootools和jquery选择器大量使用,而我的框架是基于mootools的。因此,在我使用看起来像$$('input[class=randomclass]')的选择器后,所有输入都将被截断,我将无法克隆它们(mergeAttributes)。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<meta http-equiv="X-UA-Compatible" content="IE=7" />
<html>
<head>
<script type='text/javascript'>
window.onload = function() {
org = document.getElementById('o');
cln = document.getElementById('c');
btn1 = function() {
cln.mergeAttributes(org);
alert(cln.className)
}
btn2 = function() {
org.getAttributeNode('class');
try {
cln.mergeAttributes(org);
} catch (e) {
alert(e.description)
}
}
}
</script>
</head>
<body>
<div id='placeHolder'>
Original:
<input type='text' class='original' id='o'></input>
<br> Clone:
<input type='text' class='clone' id='c'></input>
<br>
</div>
<input type='button' value='mergeAttributes without "getAttributesNode" ' onclick='btn1()'>
<br>
<input type='button' value='mergeAttributes with "getAttributesNode" ' onclick='btn2()'>
<br>
</body>
</html>
似乎问题出在jQuery库中。 此解决方案由 dataTabes 论坛的 cqrranthuohill3 提供。 他提到了 Dottoro.com
在 jquery 中.js在 cloneFixAttributes( src, dest ) 函数中大约第 6092 行。 取代:
// mergeAttributes, in contrast, only merges back on the
// original attributes, not the events
if ( dest.mergeAttributes ) {
dest.mergeAttributes( src );
}
跟:
// mergeAttributes, in contrast, only merges back on the
// original attributes, not the events
try{
if ( dest.mergeAttributes ) {
dest.mergeAttributes( src );
}
} catch (exception) {
for (var i=0; i < src.attributes.length; i++) {
var attr = src.attributes[i];
var attrName = attr.name.toLowerCase ();
if (attrName != "id" && attrName != "name") {
dest.setAttribute (attr.name, attr.value);
}
}
}
试一试。
在一些建议之后,我设法解决了与 Element.getAttributeNode('class') 相关的问题,因为它正在破坏 Element.mergeAttributes(src),我不得不用自定义函数替换 mootools 中 Element.getAttributeNode 的所有实例。
替换默认 Element.getAttributeNode 的函数:
getAttributeNode_M = function(el, attr) {
var AllAttribues = el.attributes;
for (var i = 0; i < AllAttribues.length; i++) {
if (el.attributes[i].name.toLowerCase() == attr.toLowerCase()) {
return el.attributes[i];
}
}
return false;
}
- electronic BrowserWindow的最小高度和宽度在hide()show()方法之后不起作用
- 有没有任何方法可以将控制器从文件加载到ui路由器$stateProvider中
- 数组在递归方法中设置为null
- 打破承诺链的好方法是什么
- 在使用Polymer'加载所有json文件后执行方法;s的核心ajax
- 使用“;这个“;JavaScript原型方法中的关键字
- 序列化数据属性中对象的最可靠方法
- 使用Objective-C的JavaScript注入方法
- 有没有一种方法可以添加相同的项目val=“0”;4〃;到JavaScript中数组的每个对象
- 有没有一种方法可以防止img get请求使用css或js发生
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- toBoolean方法类似于toString
- 如何在单击复选框后调用控制器方法
- 是否有任何方法可以使用jQuery替换在数组中定义值的文本
- 递归使用 eval() 是检查程序执行的好方法吗?
- 如何在webView,Android中从@JavascriptInterface方法调用Javascript
- toLocaleDateString和toLocaleString方法不尊重机器时区
- 有条件更新d3.js力图中节点的最佳方法
- TypeError:在不兼容的接收器nodejs上调用了方法Uint8Array.length
- IE11 bug - 调用 javascript getAttributeNode 方法会制动 mergeAttribu