Javascript:如何将元素转换为HTML评估的字符串?

时间:2018-01-08 15:14:09

标签: javascript html

以下是我想做的简单示例:

var footnote = somewhere.innerHTML    // This is <q>the note</q>.
var result = ???(footnote)
target.setAttribute("title", result)  // This is "the note".

我已经为&#34; ???&#34;尝试了各种方法和功能,但最后是标题中显示的原始标记,或者是纯文本,没有引号。< / p>

除了自己处理所有内部标记之外,有没有办法将元素转换为包含HTML扩展时的显示方式的字符串?

澄清:

我认为这很明显来自&#34;我有&#34;和#34;我想&#34;代码注释中指示的值,但这是我想要做的:

  • 如果您需要特定类型,我有一个元素(比如<p>) 有内容&#34; This is <q>the note</q>.&#34;
  • 我想要的东西会将其转换为适合在其他元素的title="..."属性中使用的字符串。
  • 可显示的内部标记(在此特定示例中为<q>)需要进行HTML解释,以便它们显示为实际引号,理想情况下处理嵌套引号。
  • innerHTML转换为字符串会使原始标记保持原位。
  • innerText转换为字符串会忽略标记并且不会产生引号。
  • 除了编写自己的函数来处理它之外,还有其他方法可以进行HTML解释吗?

1 个答案:

答案 0 :(得分:0)

当您添加q标记时,您真正添加了一个文本节点(这是您使用textContent, innerText, etc获得的),其周围有两个CSS伪元素,即打开和关闭报价。

伪元素和伪类都不会出现在文档源或文档树中。它们实际上并不存在于DOM中,因此无法选择/赢得任何元素属性值。

简而言之,使用<q></q>更具语义标记,但如果您希望在视图范围之外表示这些引用,则可能需要使用传统的&quot; < / p>

示例:

&#13;
&#13;
let p = document.querySelector("p"), div = document.querySelector("div");
div.title = p.textContent;
console.log(div.title);
&#13;
<p>&quot;Example Text&quot;</p>
<div></div>
&#13;
&#13;
&#13;

此外,虽然我会说我不推荐它,但如果你真的想保留你拥有的东西并且你不太关心优化,你可以简单地使用替换:

&#13;
&#13;
let p = document.querySelector("p"), div = document.querySelector("div");
div.title = p.innerHTML.replace(/<q>|<\/q>/gmi, '"');
console.log(div.title);
&#13;
<p><q>Example Text</q></p>
<div></div>
&#13;
&#13;
&#13;