标签: dom3

50
推荐指数
2
解决办法
5万
查看次数

Internet Explorer中的DOM Level 3 XPath

我刚安装IE10在我的Windows 7,而且我发现,即使我很高兴,从AJAX请求个XML现在可以兼容DOM文档,就像一个相当基本的功能document.evaluate仍然不支持.

更糟糕的是,由于这些个XML是不是定制的微软IXMLDocument对象,节点不支持selectNodesselectSingleNode了.最后,似乎IE10不支持DOM Level 3 XPath或MSXML Xpath.

说真的,微软?有什么我想念的吗?

当然,我可以使用querySelectorquerySelectorAll,但我不想失去相当多的向后兼容性.

否则,仍然可以使用此行请求MSXML文档

try {xhr.responseType = "msxml-document";} catch(e) {}
Run Code Online (Sandbox Code Playgroud)

如规定在这里,但我认为这将是很好对付,最后,在IE标准DOM文档了.

那么,有没有办法在IE10中使用带有标准DOM文档的XPath?

更新2013年6月26日 IE11尚未稳定,但仍然不支持document.evaluate.如果它不支持它在稳定的版本,我怀疑它会永远支持它.毋庸置疑,这是荒谬的.

我知道你可以在DOM节点中使用querySelector/ All,但它在IE9及更低版本中不受支持,这仍然是非常常用的,无论如何XPath比选择器更强大.

幸运的是(如果可以这么说),你仍然可以设置xhr.responseType = "msxml-document".有那么一刻,我担心你再也不能那样做了......

更新23/11/2013 IE11现在稳定,但遗憾的是,它不支持document.evaluate.随着重量级XML文档在Web应用程序中越来越少地使用JSON或其他光表示法格式,这变得不那么成问题了,但仍然如此.

设置responseType属性仍然提供遗留的XML文档,所以我猜没有丢失.不过,我不知道IE12是否会成立.

更新15/8/2015现在听起来很荒谬,但Edge现在支持document.evaluate.就在(几乎)一切都切换到JSON进行数据交换时.嗯,迟到总比没有好,我想.

internet-explorer xpath msxml xmldom dom3

32
推荐指数
2
解决办法
2万
查看次数

DOM突变事件替换

由于w3c将DOM变异标记为已弃用(请参阅http://www.w3.org/TR/DOM-Level-3-Events/#events-mutationevents),是否有(快速)替代方法来检测属性修改在DOM?

events html5 dom dom3 mutation-events

21
推荐指数
4
解决办法
2万
查看次数

DOMNodeInserted/Removed事件polyfill(或类似事件)

我需要一种方法来监听删除或添加节点的子节点时的更改.我制作了一个自动滚动插件,可以在添加新项目时将元素滚动到底部.我正在听的事件是DOMNodeInsertedDOMNodeRemoved.

我正在寻找DOMNodeInsertedDOMNodeRemoved我的polyfill .环顾四周,我无法找到任何已经存在的东西.所有浏览器都不支持该事件,目前已弃用.我有一个简单的(很可能是天真的)polyfill我写得很快,但我怀疑它是否有效(好).

我知道这些事件已被弃用,但有没有更好的方法来监听元素子项的变化?

(function() {
    var works = false;
    var $test = document.createElement("div");
    var $testchild = document.createElement("a");

    $test.addEventListener("DOMNodeInserted", function() {
        works = true;
    }, false);

    $test.appendChild($testchild);

    if(!works) {
        var nodeproto = Node.prototype;
        var nativeAppend = nodeproto.appendChild;
        var nativeRemove = nodeproto.removeChild;

        nodeproto.appendChild = function() {
            nativeAppend.apply(this, arguments);
            this.fireEvent("DOMNodeInserted");
        };

        nodeproto.removeChild = function() {
            nativeRemove.apply(this, arguments);
            this.fireEvent("DOMNodeRemoved");
        };
    }
})();
Run Code Online (Sandbox Code Playgroud)

javascript dom-events mutation-observers dom3

6
推荐指数
1
解决办法
1595
查看次数