添加DOM
要添加新的DOM节点,除了通过jQuery的 html() 这种暴力方法外,还可以用 append() 方法,例如:
<div id="test-div">
<ul>
<li><span>JavaScript</span></li>
<li><span>Python</span></li>
<li><span>Swift</span></li>
</ul>
</div>
如何向列表新增一个语言?首先要拿到 <ul> 节点:
var ul = $('#test-div>ul');
然后,调用 append() 传入HTML片段:
ul.append('<li><span>Haskell</span></li>');
除了接受字符串, append() 还可以传入原始的DOM对象,jQuery对象和函数对象:
// 创建DOM对象:
var ps = document.createElement('li');
ps.innerHTML = '<span>Pascal</span>';
// 添加DOM对象:
ul.append(ps);
// 添加jQuery对象:
ul.append($('#scheme'));
// 添加函数对象:
ul.append(function (index, html) {
return '<li><span>Language - ' + index + '</span></li>';
});
传入函数时,要求返回一个字符串、DOM对象或者jQuery对象。因为jQuery的 append() 可能作用于一组DOM节点,只有传入函数才能针对每个DOM生成不同的子节点。
append() 把DOM添加到最后, prepend() 则把DOM添加到最前。
另外注意,如果要添加的DOM节点已经存在于HTML文档中,它会首先从文档移除,然后再添加,也就是说,用 append() ,你可以移动一个DOM节点。
如果要把新节点插入到指定位置,例如,JavaScript和Python之间,那么,可以先定位到JavaScript,然后用 after() 方法:
var js = $('#test-div>ul>li:first-child');
js.after('<li><span>Lua</span></li>');
也就是说,同级节点可以用 after() 或者 before() 方法。