Nic*_*ney 6 html jquery append line-breaks
起初我在我的DOM中有这个:
<li>
<span>A</span>
</li>
Run Code Online (Sandbox Code Playgroud)
当我这样做:
$("li").append("<span>B</span>");
以下是我查看DOM时得到的内容:
<li>
<span>A</span>
<span>B</span>
</li>
Run Code Online (Sandbox Code Playgroud)
但我想拥有
<li>
<span>A</span><span>B</span>
</li>
Run Code Online (Sandbox Code Playgroud)
我需要在同一行显示跨度,以避免在两个元素之间显示空白.
使用javascript innerHTML,问题与jQuery使用append和html函数相同.
谢谢您的帮助
Dav*_*mas 10
你能解决,或者至少避免,这个问题通过简单地使用after()代替append():
$("li span").last().after("<span>C</span>");
Run Code Online (Sandbox Code Playgroud)
$("li span").last().after("<span>C</span>");
$('#generatedHTML').text($('li').html());Run Code Online (Sandbox Code Playgroud)
#generatedHTML {
white-space: pre-wrap;
font-family: mono;
padding: 0.5em;
margin: 0;
background-color: #eee;
}
#generatedHTML::before {
content: "Created HTML: ";
color: #999;
display: block;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li>
<span>A</span>
</li>
</ul>
<div id="generatedHTML"></div>Run Code Online (Sandbox Code Playgroud)
另外,请注意,我纠正你的HTML:一个li是只有有效时的直接孩子ul或ol(它不应该被包含在任何其他元素).
此外,您可以使用更复杂的替代方案:
$("li").append("<span>B</span>").contents().filter(function(){
return this.nodeType === 3;
}).remove();
Run Code Online (Sandbox Code Playgroud)
$("li").append("<span>B</span>").contents().filter(function(){
return this.nodeType === 3;
}).remove();
$('#generatedHTML').text($('li').html());Run Code Online (Sandbox Code Playgroud)
#generatedHTML {
white-space: pre-wrap;
font-family: mono;
padding: 0.5em;
margin: 0;
background-color: #eee;
}
#generatedHTML::before {
content: "Created HTML: ";
color: #999;
display: block;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li>
<span>A</span>
</li>
</ul>
<div id="generatedHTML"></div>Run Code Online (Sandbox Code Playgroud)
虽然已经有一段时间了,但我认为值得添加以上的纯JavaScript版本:
let htmlToAppend = '<span>B</span>',
span = document.querySelector('li span');
span.insertAdjacentHTML(
'afterend', htmlToAppend
);
document.querySelector('#generatedHTML').textContent = span.parentNode.innerHTML;
Run Code Online (Sandbox Code Playgroud)
let htmlToAppend = '<span>B</span>',
span = document.querySelector('li span');
span.insertAdjacentHTML(
'afterend', htmlToAppend
);
document.querySelector('#generatedHTML').textContent = span.parentNode.innerHTML;Run Code Online (Sandbox Code Playgroud)
#generatedHTML {
white-space: pre-wrap;
font-family: mono;
padding: 0.5em;
margin: 0;
background-color: #eee;
}
#generatedHTML::before {
content: "Created HTML: ";
color: #999;
display: block;
}Run Code Online (Sandbox Code Playgroud)
<ul>
<li>
<span>A</span>
</li>
</ul>
<div id="generatedHTML"></div>Run Code Online (Sandbox Code Playgroud)
参考文献: