怎么获取一个html标签,但是不含里面的内容?

如题,比如下面这个标签

<nrmark  class="highlight-yellow" style="position: relative;" data-guid="db0923d5-763e-44e9-b765-cdc95de32b32">业为例,新近加入竞争的特斯拉汽车公司,就因为美国几个州禁止其直接向消费者售卖汽车的规定而</nrmark>

我只想拿到前后两个标签,得到如下的值:

var tagAtStart="<nrmark  class="highlight-yellow" style="position: relative;" data-guid="db0923d5-763e-44e9-b765-cdc95de32b32"">"

var tagAtEnd="</nrmark>"

然后替换掉里面的内容(本质就是里面的InnerHTML),组成如下的新的字符串

var newHTML=tagAtStart+"我是新内容"+tagAtEnd;

其实,就是outerHTML-innerHTML的内容,但是我要取到两边的Tag

阅读 3.1k
5 个回答
return el.outerHTML.split(el.innerText).join(newContent);

我觉得应该OK。
不过如果里面的内容和tag有冲突,就很危险。

感谢@siyuedefeng 的提醒。

我觉得你没有讲清楚需求,否则,直接这样就可以了

ele.innerHTML="我是新内容";//这里可以放纯文字,也可以放元素标签的内容

或者这样也行:

let newNode=ele.cloneNode();//只会克隆节点本身(包括节点的属性),不包括里面的文字,因为文字属于 文本节点
newNode.innerHTML="我是新内容";

这样不就实现了,要不你还想实现什么?尽管说

若是后台返回的字符串:

var test = '<nrmark  class="highlight-yellow" style="position: relative;" data-guid="db0923d5-763e-44e9-b765-cdc95de32b32">业为例,新近加入竞争的特斯拉汽车公司,就因为美国几个州禁止其直接向消费者售卖汽车的规定而</nrmark>';
console.log(test.replace(/>.*</, ">我是新内容<"));

如果是已经在页面内显示的内容,直接替换那个标签内的innerText就行。

这个使用jQuery很容易实现

var $cloneElement = $(element).clone();
$cloneElement.empty();

嵌套标签就不行了:

var reg = /<[^>]+>/g;
var result = str1.match(reg);
console.log(result[0],result[1])//前后标签
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题