如何在不使用outerHTML的情况下在javascript中将标签作为文本? [复制]

Posted

技术标签:

【中文标题】如何在不使用outerHTML的情况下在javascript中将标签作为文本? [复制]【英文标题】:How do I get tag as text in javascript, without using outerHTML? [duplicate] 【发布时间】:2020-07-21 21:58:42 【问题描述】:

我想要的是没有innerhtml的outerHTML。

我不想计算innerHTML的字符串,因为它可能很昂贵而且我必须经常做这个操作,有没有简单的方法来获得它?

【问题讨论】:

您要达到的目标的示例? 你不能只使用 DOM 吗?一切都可用,假设您使用 document.getElementById,然后验证返回是一个对象,然后取消引用返回的节点以获取 .parentNode。 【参考方案1】:

您可以使用元素的内部结构并自己构建字符串:

function getTagHTML(el) 
  if (!el instanceof HTMLElement) return null;
  let result = `<$el.tagName.toLowerCase()`;
  for (const attribute in el.attributes) 
    if (el.attributes[attribute].nodeValue) 
      result += ` $el.attributes[attribute].name="$el.attributes[attribute].nodeValue.replace(/"/g, "&quot;")"`
  
  result += `></$el.tagName.toLowerCase()>`;
  return result;


console.log(getTagHTML(document.getElementById('outer')));
<div id="outer" class='i-want-"this"'>
  <span>I do not want this</span>
</div>

如果开始标签足够了,那很容易:

const tag = `$outer.outerHTML.split('>')[0]>`;

console.log(tag);
<div id="outer" class="i-want-this">
  <span>I do not want this</span>
</div>

请注意,正如 Quentin 所指出的,&gt; 不能用来标记开始标签的结尾,因为它很可能出现在任何属性的值中。

【讨论】:

这不可靠。您不能将第一个 &gt; 字符作为开始标记的结尾。例如:jsbin.com/liqarigiju/1/edit?html,js,console 这似乎没有正确编码。不是必须是3 &amp;gt; 2吗? 没有。 &gt; 字符在属性值内没有特殊含义(至少在被引用的情况下)并且不需要表示为实体。如果 HTML 是使用实体编写的,那么您会得到相同的结果,因为浏览器会在通过 outerHTML 将 DOM 转换回 HTML 时对其进行规范化。 jsbin.com/tatuhutixa/1/edit?html,js,console @Quentin Thx 指出,将相应地编辑到我的帖子中。添加了一种不依赖字符串解析的更强大的方法。 重新编辑:el.attributes[attribute].nodeValue 需要转义。它可能包含" 个字符。【参考方案2】:

据我所知,没有 javascript “本机”方式来获取没有其内容的 HTML 标记。如何使用 jQuery 和

let oElement = $("#myElementsID");

let oElement = $(".myElementsClass");

这不会给你 HTML 标记,而是你可以在一个整洁的对象中要求的所有信息。

【讨论】:

以上是关于如何在不使用outerHTML的情况下在javascript中将标签作为文本? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

如何在不四舍五入的情况下在 Java 中格式化双输入?

如何在不使用 JNDI 的情况下在 ConnectionFactory 中指定主机、端口和通道

Spring Boot - 如何在不使用 spring 注释的情况下在运行时获取端口

如何在不使用 AudioQueueRef 的情况下在 AudioQueue 中设置音量?

在不使用关系数据库的情况下在 Java 中存储和检索对象的简单方法? [关闭]

如何在不使用 &nbsp 的情况下在行内元素之间添加空格 [重复]