当前位置: 首页 > 知识库问答 >
问题:

在div中使用span(例如)标记换行单词,而div内部有HTML标记

朱天逸
2023-03-14

我想在段落内用span标记包装每个单词。当段落中没有HTML标记时,我成功地创建了它。但是当段落内有HTML标记时,它就会变得一团糟。

下面是段落中没有HTML标记时的示例:

null

$('div').html(function(i, v) { 
    return $.trim(v).replace(/(\w+)/g, '<i class="woord">$1</i>'); 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div>
    11111 22222 33333 44444
</div>

null

但是当段落中有HTML标记时,它就会变得乱七八糟,如下所示:

null

$('div').html(function(i, v) { 
    return $.trim(v).replace(/(\w+)/g, '<i class="woord">$1</i>'); 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div>
    11111 <span>22222 <small>33333</small></span> 44444
</div>

null

谢谢DrunkenPoney的努力。他做的最多,但它已经打破了内部跨度的内容。

我希望结果是这样的,浏览器中出现的每个单词都用包装起来,如下所示:

<div>
    <i>June</i> <span><i>10</i> <i>sssssss</i></span> <i>ggdgfdf</i>
</div>

他的代码结果破坏了原来的span代码结构,如下所示:

<div>
  <i class="woord">11111</i> <i class="woord"><span>22222</span></i> <i class="woord"><small>33333</small></i> <i class="woord">44444</i>
</div>

共有1个答案

关志勇
2023-03-14

确实,您需要遍历所有文本节点。在每个文本节点中,您只需用您想要的字符串替换所有单词即可。所以这是相当清楚的想法。注意,不推荐使用Regex对HTML标记进行搜索/替换。这就是我们需要处理原始文本节点的原因。

同样为了帮助使用jQuery方便地完成这一操作,我们使用replacewith方法就地用Regex替换返回的all替换文本节点。

下面是详细代码:

var wrapHtml = function(textNode){
                 return $(textNode).replaceWith(
                                    textNode.nodeValue
                                            .replace(/\w+/g,"<i class='woord'>$&</i>"));
               };

$("div").contents().each(function(i,e){
 if(e.nodeType == 1){     
       var elems = [];
       elems.push(e);
       while(elems.length > 0){
         var ce = elems.pop();
         if(ce.nodeType == 1) {
          $(ce).contents().each(function(j,o){
              if(o.nodeType == 1) {
                   elems.push(o);
                  } else {
                   wrapHtml(o);
                  }
              });
         } else {
              wrapHtml(ce);
         }
       }     
     } else {
       wrapHtml(e);
     }
});

演示。

 类似资料:
  • 你好,我试图使用JSoup提取嵌套DIV标签中的span标签。下面的代码只是较大代码的一个片段。 我试图提取最后一个SPAN标签中的文本(多伦多C08,莫斯公园,多伦多和120-21-S) 我已经成功地解析了文档的其他部分,但是,我似乎无法隔离这些跨度。代码片段来自一个更大的页面(整页)。我可能使用了错误的方法,但下面是我为捕获父DIV之间的跨度所做的工作(结果在帖子顶部)。 所以现在我有了第一个

  • 我有一个任务,需要在web应用程序内部的几个页面上添加一些标记。文本已经存在,但包装在其他标签中,我需要将其转换为h1标签。当我这样做的时候,我需要在页面上保持相同的设计,所以设计明智,什么都不应该改变。我们需要谷歌机器人的h1标签。 让我在下面给你展示一个例子。目前我有一页是这样的: null null 我需要在那里插入。我在internet上读到,在中添加不是一个好主意,因为我的第一个想法是用

  • 我试图从这些div标签中获取文本,但是它们都不返回任何内容: HTML: 我想得到div类“消息”和h4标记和跨越“日期时间”中的文本,我试图: 和: 但是他们没有成功。

  • 我想使用jsoup从网页中提取内容。这些值在内部标签中,如何提取这些值? 例如 我想提取锚点标签中的内容首页*将如何做到这一点?

  • 我在div标签中有一个段落和一个按钮。我想在div标记上使用onlick=“”方法,而不是在div标记内的按钮上。我怎么能这么做。

  • 我正在写一个chrome扩展,它将改变屏幕上某些单词的颜色。我很难找到符合我需要的文本,然后准确地将它包装成一个跨度。html中的同一个单词通常会在页面的其他位置被替换,从而使链接和样式变得毫无用处。 我的示例代码如下: