Javascript - 确定对 Element.children 功能的支持
Javascript - Determining support for Element.children feature
我最近在确定浏览器对某些 DOM 功能的支持时遇到了一个问题。其中之一是Element.kids功能,这仍然让我头疼。我的代码中有以下行:
var NATIVE_CHILDREN = Element.prototype.hasOwnProperty('children');
它应该检查浏览器是否支持Element.children -feature [https://developer.mozilla.org/en/DOM/Element.children]。
根据MDN和快速测试,所有主流浏览器都支持此功能。
在Firefox上的Firebug上,NATIVE_CHILDREN的值是预期的。令人惊讶的是,在Chrome,Safari和Opera上,该值为假(不幸的是,我没有使用Windows来检查IE对此的看法)。
根据 DOM4 - 自由编辑草案 2012 年 4 月 5 日 [http://dom.spec.whatwg.org/#element],儿童应该是 Element 对象原型的一部分。显然,Chrome,Safari和Opera的Element对象不包含这样的方法!
我尝试检查过 HTMLCollection 和 Node 的原型(我也测试了 HTMLParagraphElement 和 HTMLBodyElement),但它们似乎都没有包含名为"child"的方法(Firefox 除外)。如何使我的测试跨浏览器工作?我不想为此使用任何外部库,因为这是我自己的小库。
此测试可能在Chrome上返回false的原因是您正在检查原型。这不是最好的方法,原因如下:
不同的浏览器可以(并且确实)使用原型的不同实现,例如,某些原型在IE中无法访问。在这种情况下,我会说您的问题是铬依赖于(非标准)
__proto__
属性而不是prototype
的结果。我不记得什么时候了,但我在 chrome 上遇到了类似的问题,这就是问题的根源。AFAIK 所有浏览器的元素都有一个 child 属性,尽管它们在某些情况下的行为不同,所以我对检查此类属性是否存在的使用有些怀疑。
如果您仍然想检查这一点,为什么不使用
document.body.hasOwnProperty('children')
?在 FF、Chrome、Safari 和 IE 上返回 true。
这是因为某些引擎仅在创建元素时对children
属性进行打耳光。Chrome 控制台中的快速测试显示:
Element.prototype.hasOwnProperty( 'children' ); //false
//however,
document.createElement( 'foo' ).hasOwnProperty( 'children' ); //true
//or even
!!document.createElement( 'foo' ).children; //true
非函数属性通常不会出现在prototype
上,原因很简单 - 它们尚未设置,如果它们会设置,也没有意义。 Element.prototype
没有子元素,因为它不是一个元素,它是一个元素的原型。
检查if( 'children' in document.body)
比弄乱原型更安全。重要的是要注意引号,如果不是可能使用/创建的变量children
...
根据QuirksMode的说法,除Firefox 3之外的所有浏览器都支持children
(这对我来说是一个惊喜,因为我在该浏览器中进行测试时它可以工作......),因此不需要测试此属性。
- 添加文字和评论功能更新Div
- JavaScript打印功能使日历停止工作
- 每当您在选择器内移动鼠标时,悬停功能就会重复
- 如何防止网页加载后自动启动功能
- 除修剪外的其他功能
- 悬停功能触发器
- 使用angularjs向浏览器发送servlet响应(下载功能)
- 删除CKEditor工具栏按钮,但不删除功能
- 异步facebook功能
- 如何将chrome扩展功能移植到移动设备(特别是jquery和trello)
- jQuery滚动功能只工作一次
- Graphiti中是否有任何工具提示功能
- React redux初始化功能,无论状态变化如何
- 在哪里可以学习ECMAScript标准中尚未包含的JavaScript功能
- 正在获取select上的功能id
- Rhino打印功能
- 使用(navigator.geolocation)检测浏览器功能错误
- 主体单击删除功能上的输入框宽度
- JQuery使用相同的功能自动完成各种输入文本
- Javascript - 确定对 Element.children 功能的支持