javascript - jQuery unwrap 添加了一个中断

标签 javascript jquery

我有一个 jQuery 突出显示工具,它可以动态地将类添加到字符串中。 如果元素包含单词

<p>Hello World</p>

并且用户搜索“ell”,它会在单词中添加一个跨度

<p>H<span>ell</span>o world</p> 

要重置它,我使用

$("span").contents().unwrap();

问题出在 dom 上,文本现在看起来像这样

<p>H
ell
o World</p>

因为 jQuery 正在添加中断,所以搜索“Hello”将不起作用。 我尝试过删除换行符并尝试过 css 但没有成功

$('body').html().replace(/(\r\n|\r|\n){2,}/g, '$1\n');

p {
  white-space: nowrap;
}

有什么建议吗?

最佳答案

Because jQuery is adding breaks

不,它不是添加中断。您所看到的只是三个独立的文本节点。您之前有 3 个文本节点,跨度之前和之后各有一个,跨度内部各有一个 - 删除跨度后只剩下这三个单独的文本节点。

但是有一个简单的方法可以解决这个问题:Node.normalize()

“The Node.normalize() method puts the specified node and all of its sub-tree into a "normalized" form. In a normalized sub-tree, no text nodes in the sub-tree are empty and there are no adjacent text nodes.”

请注意,这是 HTML 元素对象的方法,而不是 jQuery 对象 - 因此您需要在调用此方法之前取消引用 jQuery 对象:

$("span").contents().unwrap();
$("p")[0].normalize();

关于javascript - jQuery unwrap 添加了一个中断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36497779/

相关文章:

JavaScript For循环: Assignment to character not working

javascript - react 导航 goBack() 并在上一个屏幕中更新

javascript - 使用 js onclick 更改输入类型颜色

javascript - Jquery 选择器选择一个 div 下的 h4 标签

javascript - 使用 JQuery 添加 css 属性悬停

javascript - 刚刚将我的网站移至 SSL,但我的内容不安全

javascript - 解析错误 JSON.parse(意外的标记 u)

javascript - js中如何删除数组中的数组元素?

javascript - Jquery 字符串转对象

javascript - Wordpress 在 Contact Form 7 中发送有关重定向的表单数据