簡體   English   中英

將文本節點合並到一個文本節點並包裹在 p-tag 中。 Javascript/JQuery

[英]Merge text nodes to one text node and wrap inside a p-tag. Javascript/ JQuery

我有一個 html 文檔,它由幾個文本節點組成,通常用 p-tags 包裹,但有些不是。 像這樣:

<div id="container">
  <p>"Some text"</p>
  <p>"Some text"</p>
  "Some text" "Some text" "Some text"
  <p>"Some text"</p>
  "Some text" "Some text" "Some text"
</div>

我找到了一種使用 Jquery 將所有文本節點包裝在 p-tags 中的方法,但這不是我想要實現的。

 function getTextNodesIn(node, includeWhitespaceNodes) {
    var textNodes = [], whitespace = /^\s*$/;

    function getTextNodes(node) {
        if (node.nodeType == 3) {
            if (includeWhitespaceNodes || !whitespace.test(node.nodeValue)) {
                textNodes.push(node);
            }
        } else {
            for (var i = 0, len = node.childNodes.length; i < len; ++i) {
                getTextNodes(node.childNodes[i]);
            }
        }
    }

    getTextNodes(node);
    return textNodes;
}

var textnodes = getTextNodesIn($("#container")[0]);
for(var i=0; i < textnodes.length; i++) {
    if(($(textnodes[i]).parent().is("#container"))) {
        $(textnodes[i]).wrap("<p>");
    }
}

我希望 p-tags 之間沒有 p-tag 包裹的所有文本節點合並到一個文本節點,然后在該文本節點周圍包裹一個 p-tag。 像這樣:

<div>
  <p>"Some text"</p>
  <p>"Some text"</p>
  <p>"Some text Some text Some text"</p>
  <p>"Some text"</p>
  <p>"Some text Some text Some text"</p>
</div>

這可能嗎? 對不起我的英語不好。

您可以做的是清空容器並添加所有用<p>包裹的子項。
所以你不在乎原始文本是否有“p”,你把文本用“p”換行。
代碼更簡單易讀。

$(document).ready(function(){
  var original = $("#container").text().split("\n");
  $("#container").empty();
  $(original).each(function(a,b){
    $("#container").append("<p>" + b + "</p>");
  });
});

在這里你有一個工作示例的小提琴。

這將 HTML 保留在段落內,並在段落中的段落之間包裝“間隔”,它將基本節點和間隔保存到列表中,然后按順序重建它。

var container = document.getElementById("container").childNodes;
var ps = [];
var ps_interval = [];
for(var i=0; i < container.length; i++){
  if(container[i].nodeType == 3){ //if its a textnode
    var str = container[i].textContent.trim();
    if(str !== ""){
      ps_interval.push(str);
    }
  }else{
    if(container[i].nodeName != 'P'){ //if it's not a paragraph
      ps_interval.push(container[i]);  
    }else{
      if(ps_interval.length !== 0){
        ps.push(ps_interval);
        ps_interval = [];
      }
      ps.push(container[i]);
    }
  }
}
if(ps_interval.length !== 0){
  ps.push(ps_interval);
}

function addToP(interval){
  var p = document.createElement("p");
  for(var j=0; j< interval.length; j++){
    if("string" == typeof interval[j]){
      p.appendChild(document.createTextNode(interval[j]));
    }else{
      p.appendChild(interval[j]);
    }
  }
  return p;
}

$('#container').empty();
for(var k=0; k < ps.length; k++){
  if( Object.prototype.toString.call( ps[k] ) === '[object Array]' ) {
    $('#container').append(addToP(ps[k]));
  }else{
    $('#container').append(ps[k]);
  }
}

讓它在這里工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM