jquery - 使用 jquery append() 或 html() 时避免换行

标签 jquery html append line-breaks

起初我的 DOM 中有这个:

<li>
  <span>A</span>
</li>

当我这样做时:

$("li").append("<span>B</span>");


这是我查看 DOM 时得到的结果:

<li>
  <span>A</span>
  <span>B</span>
</li>


但我想拥有

<li>
   <span>A</span><span>B</span>
</li>


我需要在同一行上显示 span 以避免在两个元素之间显示空白。

使用 javascript innerHTML 的问题与 jQuery 将其用于 append 和 html 函数的问题相同。

Here is a jsFiddle

谢谢你的帮助

最佳答案

您可以通过简单地使用 after() 代替 append() 来解决或至少避免问题:

$("li span").last().after("<span>C</span>");

$("li span").last().after("<span>C</span>");
$('#generatedHTML').text($('li').html());
#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;
}
<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>

此外,请注意我更正了您的 HTML:li ul 的直接子级时有效>ol(它不应包含在任何 其他元素中)。

此外,您可以使用更复杂的替代方法:

$("li").append("<span>B</span>").contents().filter(function(){
    return this.nodeType === 3;
}).remove();

$("li").append("<span>B</span>").contents().filter(function(){
    return this.nodeType === 3;
}).remove();
$('#generatedHTML').text($('li').html());
#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;
}
<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>

虽然已经有一段时间了,但我认为还值得添加上面的纯 JavaScript 版本:

let htmlToAppend = '<span>B</span>',
  span = document.querySelector('li span');

span.insertAdjacentHTML(
  'afterend', htmlToAppend
);
document.querySelector('#generatedHTML').textContent = span.parentNode.innerHTML;

let htmlToAppend = '<span>B</span>',
  span = document.querySelector('li span');

span.insertAdjacentHTML(
  'afterend', htmlToAppend
);
document.querySelector('#generatedHTML').textContent = span.parentNode.innerHTML;
#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;
}
<ul>
  <li>
    <span>A</span>
  </li>
</ul>
<div id="generatedHTML"></div>

引用资料:

关于jquery - 使用 jquery append() 或 html() 时避免换行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15513867/

相关文章:

python - 在 Pandas 中使用 value_counts() 追加列

javascript - 我如何对 iframe 中具有可编辑属性的元素执行 onclick?

html - css transition-delay on pointer-events 不起作用

html - 使用 CSS 在 Firefox 中圆 Angular

string - 如何在 Golang 中使用 Append 方法。语法要求接口(interface)?

c++ - 为什么这个 write() 操作只写一行

javascript - 从 PHP 创建 JavaScript Snackbar

php - 使用 PHP 和 AJAX 更新 HTML 表中的内容

javascript - Select2 与 Knockout.js 初始值

javascript - 进行更改后刷新页面不会在网络浏览器中呈现