匹配标签内部的部分文本

时间:2016-12-18 09:31:19

标签: javascript jquery html regex

我在客户端上下文中。 我有这个HTML:

<p>Text text \n other text </p>

我想只匹配段落中的\ n元素,并仅将其替换为&#34; br&#34;标签

我想只在标签内执行此操作&#34; p&#34;并为所有比赛。

我应该在javascript 中使用正则表达式。

谢谢,抱歉我的英语不好。

2 个答案:

答案 0 :(得分:3)

使用html()方法进行回调,内部回调使用String#replace方法替换文字。

&#13;
&#13;
$('p').html(function(i, htm) {
  return htm.replace(/\\n/g, '<br>');
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Text text \n other text</p>
&#13;
&#13;
&#13;

更新1:如果是字符串,请使用String#replace方法。

&#13;
&#13;
console.log(
  '<p>Text text \n other text</p>'.replace(/\n/g, '<br>')
)
&#13;
&#13;
&#13;

更新2 :如果字符串包含其他标记元素,并且您只想更新p标记,请执行类似的操作。

&#13;
&#13;
var str = '<p>Text text \n other text</p>';

console.log(
  // create a temporary div eleemnt 
  $('<div>', {
    // set html content from string
    html: str
  })
  // get all p tags
  .find('p')
  // iterate and replace \n
  .html(function(i, htm) {
    // replace \n with br tag
    return htm.replace(/\n/g, '<br>')
  })
  // back to the temp div
  .end()
  // get it's updated html content
  .html()
)
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

更新3:使用纯JavaScript生成临时DOM元素。

&#13;
&#13;
var str = '<p>Text text \n other text</p>';
// create a temporary div element
var div = document.createElement('div');
// set html content form string
div.innerHTML = str;
// get all p tags and convert into Array using Array.from
// for older browser use [].sclice.call instead
Array.from(div.getElementsByTagName('p'))
  // iterate over p tags
  .forEach(function(el) {
    // update the html content
    el.innerHTML = el.innerHTML.replace(/\n/g, '<br>')
  });
// get updated html content
console.log(div.innerHTML);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您可以使用for循环getElementsByTagName

for(i = 0; i < window.document.getElementsByTagName("p").length; i++){
    window.document.getElementsByTagName("p")[i].innerHTML = window.document.getElementsByTagName("p")[i].innerHTML.replace(/\\n/g, "<br/>");
}

如果这是在字符串内部而不在HTML内部,您可以将其添加到<div>元素,同时处理它:

var myString = "<p>Text text \n other text </p>";
var div = document.createElement("div");
div.innerHTML = myString;
for(i = 0; i < div.getElementsByTagName("p").length; i++){
    div.getElementsByTagName("p")[i].innerHTML = div.getElementsByTagName("p")[i].innerHTML.replace(/\\n/g, "<br/>");
}
myString = div.innerHTML;