IE8中对象扩展后的奇怪setAttribute行为
Strange setAttribute behavior in IE8 after Object extend
我用下面的代码来创建一个微库(类似于JQuery,但只包含我需要的东西)。
window.$ = function(selector, context, undefined)
{
var getSelectorTest = function(selector, context, undefined)
{
var el;
var selector_key = selector.slice(0, 1),
matches = {
'#': 'getElementById',
'.': 'getElementsByClassName',
'@': 'getElementsByName',
'=': 'getElementsByTagName',
'*': 'querySelectorAll'
}[selector_key],
selector_value = selector.slice(1);
//add fallback for getElementsByClassName is not supported e.g. IE8
if(matches === 'getElementsByClassName' && !document.getElementsByClassName)
{
matches = 'querySelectorAll';
selector_value = selector;
}
// now pass the selector without the key/first character
el = (((context === undefined) ? document: context)[matches](selector_value));
return el;
};
var elem = getSelectorTest(selector, context, undefined);
//Extend elem before returning it
elem.attr = function(name, value) {
if(value)
{
this.setAttribute(name, value);
return this;
}
else
{
return this.getAttribute(name);
}
return elem;
};
然后当我运行下面的代码:
<script>
domReady(function(){ //https://github.com/cms/domready
var el_1 = $('#container-1');
el_1.attr("data-test", "random_value");
});
</script>
使用IE8时,我得到以下结果:
<div id="container-1" attr="function(name, value) {
if(value)
{
this.setAttribute(name, value);
return this;
}
else
{
return this.getAttribute(name);
}
}" data-test="random_value">
当然,当我使用Chrome和Firefox时,情况并非如此(我得到预期的输出,即<div id="container-1" data-test="random_value">
)。我该如何解决这个问题?
注意:我正在使用IE8开发人员工具(F12)的"HTML"选项卡来验证这一点。
与其将attr()
函数附加到所选元素上(IE8显然将其解释为在元素本身上设置属性),不如将其附加到Element
对象的原型上。
Element.prototype.attr = function(name,value){ ...
相关文章:
- jQuery/Javascript.toggleClass/.classList.toggle的特殊行为
- 不同浏览器中的空白字符正则表达式行为
- delete关键字在全局变量上的不同行为
- 在不阻止默认行为的情况下检测IE10中的缩放
- 防止默认锚点行为AngularJS
- JavaScript匿名函数行为
- java脚本在Chrome和其他浏览器中对LocaleTimeString的不同行为
- html() 的意外行为
- onmouseover事件行为不端
- 导航菜单-悬停时的背景行为怪异
- 通过JavaScript捕获并更改默认警报()行为
- javascript RegExp的奇怪行为:相同的正则表达式会产生不同的结果
- HTML文档中脚本标记的位置-<头部>&<身体>有不同的行为
- AJAX Post的奇怪Javascript/PHP行为
- Javascript不需要的关闭行为
- Javascript setattribute-名称和值无效
- 奇怪的JavasScript字符串用$&替换行为;
- Jqgrid-表未显示响应行为
- 是定义的操作系统睡眠/挂起期间setTimeout的行为
- IE8中对象扩展后的奇怪setAttribute行为