javascript - Edge 中的 DOM API 问题

标签 javascript html dom

我使用 JavaScript 中的 websockets 编写了一个聊天应用程序。我预计这不会完全支持跨浏览器。但是,我遇到了一个问题,该问题似乎是由 Chrome/Firefox 和 Edge 之间的 DOM 操作 API 差异引起的。我的应用程序在 Chrome 和 Firefox 中完美运行,但在 Edge 中出现错误。

来自 html 文件的 HTML 模板示例:

<template id ="message-template">
    <li class="media" style="margin-top:0px;">
        <div class="media-body">
                <a class="pull-left" href="#">
                    <img class="media-object img-circle " src="" />
                </a>
                <div class="media-body">
                    <span id='message-body'> </span>
                    <br />
                    <small class="text-muted" id="message-user"></small>
                    <hr />
                </div>            
        </div>
    </li>
</template>

来自 js 文件的 Javascript 示例操作和发布此模板:

function addMessage(message){
    let date = new Date();
    let mtpl = document.getElementById('message-template').content.cloneNode(true);
    mtpl.getElementById('message-body').innerHTML = message.message;
    mtpl.getElementById('message-user').innerHTML = `${message.client} | ${date.toString()}`;
    messages.appendChild(mtpl);
    //Scroll down on overflow
    messages.scrollTop = messages.scrollHeight;
}

Edge 抛出的错误是: SCRIPT438:对象不支持属性或方法“getElementById”

指向线:

mtpl.getElementById('message-body').innerHTML = message.message;

我从 Microsoft 查找了 DOM API,似乎 document.getElementById 返回了一个 IHTMLElement,它显然没有 getElementById 方法...所以,我的问题是:

如何更改我的代码以在 Edge 上运行? (理想情况下,我希望能够在没有 jQuery 的情况下做到这一点,但如果不可能,请告诉我)

注意:我不关心 IE,因为这是一个个人项目而不是商业项目。我的很多代码都是用 ES6 编写的,无论如何在 IE 中都不起作用。

最佳答案

我建议您改用 .querySelector() 函数。

所以,

mtpl.getElementById('message-body').innerHTML = message.message; 

变成了

mtpl.querySelector('#message-body').innerHTML = message.message; 

还有

mtpl.getElementById('message-user').innerHTML = `${message.client} | ${date.toString()}`;

变成了

mtpl.querySelector('#message-user').innerHTML = `${message.client} | ${date.toString()}`;

关于javascript - Edge 中的 DOM API 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39813296/

相关文章:

javascript - 使用纯 javascript 聚焦一个可编辑的 p 标签

reactjs - 我可以通过函数组件传递 ref 吗?

javascript - 我的最后一个 child 选择器有什么错误吗?

javascript - 当尝试上传超过 5mb 的文件时,Dropzone.js 在发布 500 时出现错误(内部服务器错误)

python - 样式表未从 Django 中的相对路径加载

html - 用 REPEATING BG Div (CSS) 填充剩余空间

javascript - Angular Js ng-Grid 中是否有在数据加载之前/之后调用的回调函数?

javascript - 打印出迭代中的每个数组值,值是未定义的

html - 在没有绝对定位的情况下分割图像

html - <template> 中的 outerHTML 行为