【问题标题】:wrap each char in except tags with jQuery用 jQuery 将每个字符包装在 except 标记中
【发布时间】:2011-04-22 10:17:49
【问题描述】:

我正在尝试将每个文本字符包装在一个

<div id="test"></div>

带有跨度标签。 没问题,只是我还需要保持嵌套标签不被修改。

所以如果DIV里面的字符串是:

"Some random text, <b>but</b> wait - there's <a href="http://w3.org">tags</a> inside!"

它应该为“但是”部分输出这个

<b><span>b</b><span>u</span><span>t</span></b>

单独留下 和 标记,但将所有其他字符包装在 span 中。我检查了 text() 但似乎没有办法保留标签或“保存回来”,只提取文本并永久删除 和

也许一些 jQuery 大师知道如何做到这一点?

【问题讨论】:

  • jQuery 不使用文本节点。你最好用javascript,不要用jQuery来尝试
  • @rsplak,那么我的 jQuery 解决方案怎么能正常工作呢? ;) 无需使用文本节点本身。只要检查它是否是一个文本节点,然后你就可以用 jQuery 来操作它。
  • @marcus ekwall:不错,+1

标签: javascript jquery html


【解决方案1】:

您可以使用以下代码来做到这一点:

$("div").children().andSelf().contents().each(function(){
    if (this.nodeType == 3) {
        var $this = $(this);
        $this.replaceWith($this.text().replace(/(\w)/g, "<span>$&</span>"));
    }
});

test case on jsFiddle

【讨论】:

  • 哇,谢谢!这非常适合我的需求,直到现在我才知道 nodeType 的事情 - 在我发布之前尝试找到类似的东西。
  • 我还没有用这段代码更新我的 jsfiddle 示例,但是看看我想用这个完成什么 - 看看:stackoverflow.com/questions/5755303/…
  • 它不适用于 é 和 等字符。正则表达式如何查找?
  • @clankill3er JavaScript 的 unicode 支持非常糟糕。我会参考this answer
  • 如果您的 嵌套在 左右,这将不起作用。请参阅jsfiddle.net/xhL9889n -- 你将如何改进它以适用于嵌套元素?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-31
  • 1970-01-01
  • 1970-01-01
  • 2014-03-20
  • 2015-05-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多