JS DOM等效于JQuery追加

Bat*_*ery 17 javascript jquery dom

什么是JQuery的标准DOM等价物

element.append("<ul><li><a href='url'></li></ul>")

Tob*_*ogh 30

我认为你必须扩展innerHTML属性才能做到这一点

element[0].innerHTML += "<ul><li><a href='url'></a></li></ul>";
Run Code Online (Sandbox Code Playgroud)

一些解释:

  • [0]需要因为element是一个集合
  • + =扩展innerHTML并且不覆盖
  • </a>因为某些浏览器只允许将有效的html设置为innerHTML,所以需要关闭


Ry-*_*Ry- 10

使用DOM操作,而不是HTML:

let element = document.getElementById('element');

let list = element.appendChild(document.createElement('ul'));
let item = list.appendChild(document.createElement('li'));
let link = item.appendChild(document.createElement('a'));

link.href = 'https://example.com/';
link.textContent = 'Hello, world';
Run Code Online (Sandbox Code Playgroud)

  • @TobiasKrogh:我认为如果OP不想使用jQuery追加一个元素,那么OP就不再使用jQuery了.在我的愚见. (4认同)
  • @gdoron:好吧,我实际上恰好是将当前项目完全从jQuery移开。所以也许是真实世界:) (3认同)
  • 我不想开始讨论;)我只是想指出这样一个事实:问题中的“element”和这个答案中的“element”不会相同:)...我保证接下来会更精确时间 :) (2认同)
  • @minitech:这是一个好奇心,也是一个真实的项目。我想将整个项目移至标准JS。我不想重新发明轮子,但我只是不喜欢JS库(因为我并不总是了解它们的作用和方式)。:-) (2认同)

gdo*_*ica 6

来自jQuery的源代码:

append: function() {
    return this.domManip(arguments, true, function( elem ) {
        if ( this.nodeType === 1 ) {
            this.appendChild( elem ); //<====
        }
    });
},
Run Code Online (Sandbox Code Playgroud)

请注意,为了使其工作,您需要从字符串构造DOM元素,它是使用jQuery domManip函数完成的.

jQuery 1.7.2 源代码

  • @gdoron你可以向我解释一下这个问题吗?我从你的答案中理解的是(因为"<====")应该是DOM的等价物...但是当使用HTML时它对我不起作用...对不起,如果这是一个愚蠢的问题,但domManip本身是否可访问?(据我所知它是一个jQuery函数)请不要生气,我只想了解:) (2认同)

M_R*_*R_K 6

在纯JavaScript中复制Jquery append方法的最简单方法是使用“ insertAdjacentHTML”

    var this_div = document.getElementById('your_element_id');
    this_div.insertAdjacentHTML('beforeend','<b>Any Content</b>');
Run Code Online (Sandbox Code Playgroud)

更多信息-MDN insertAdjacentHTML

  • 这应该是公认的答案,尤其是在使用模板和表单元素时。使用“innerHTML+=”将覆盖用户的文本输入值。 (2认同)