【问题标题】:Method to change self-closing tags to explicit tags in Javascript?将自闭合标签更改为 Javascript 中的显式标签的方法?
【发布时间】:2011-08-26 06:58:27
【问题描述】:

是否存在可以将自闭合标签转换为 Javascript 中的显式标签的方法或函数? 例如:

<span class="label"/>

转换为:

<span class ="label"></span>

我想将新的 HTML 从 iframe 复制到主页的外层 HTML,因为生成的新 HTML 包含自关闭标签,外层 HTML 无法识别它们,然后不会更改,页面不会'显示不正确。但是当格式是标准的,即带有非自闭标签时,outerHTML 会采用新的 HTML,页面显示完美。这就是我想更改标签的原因。


这个html是在一个字符串中

其实我并不想解析HTML,我只想找到“”并替换为“

【问题讨论】:

  • @Marcel — 仅在 XML 模式下。由于在 HTML 4 中需要 span 元素的结束标记,因此在您点击开始标记以获取它不能包含的内容之前,它不会被插入。
  • @David:我的立场是正确的。我假设浏览器会正确解析这种“标签汤”,但我知道他们不会。
  • 他们确实正确地解决了它……按照 HTML 5 中规定的规则。:)
  • @David:其实不是,网页显示不正确,所以我想改一下。
  • “你想要什么”和“他们的规范说的是正确的”是不同的东西。一旦浏览器渲染了页面,它就只有一个 DOM,尝试修补损坏的 HTML 为时已晚。在 HTML 到达浏览器的 HTML 解析器之前修复它。

标签: javascript html tags


【解决方案1】:

尝试使用此方法替换字符串 (xml/html) 中的所有自结束标记

function removeSelfClosingTags(xml) {
    var split = xml.split("/>");
    var newXml = "";
    for (var i = 0; i < split.length - 1;i++) {
        var edsplit = split[i].split("<");
        newXml += split[i] + "></" + edsplit[edsplit.length - 1].split(" ")[0] + ">";
    }
    return newXml + split[split.length-1];
}

【讨论】:

    【解决方案2】:

    我会使用正则表达式:

    var spansFixed = htmlString.replace(/&lt;span(.*)\/&gt;/g, '&lt;span$1&gt;&lt;/span&gt;');

    【讨论】:

    • 只是在这里评论以防有人使用此方法;我不会为此使用正则表达式,例如这被捕获了。 &lt;span&gt;&lt;label&gt;test test&lt;/label&gt;&lt;/span&gt;&lt;div /&gt; 匹配从
    【解决方案3】:

    谢谢大家,我终于用傻方法改自闭标签了,也许对我这样的人有帮助:

    var splitSpan = textHTML.split(">");
    var i=0;
    for(i=0;i<splitSpan.length-1;i++){
        var lengthSpan = splitSpan[i].length;
        var subSpan = splitSpan[i].substring(1,5);
        var endSpan = splitSpan[i].charAt(lengthSpan-1);
        
        if(subSpan=="span" && endSpan=="/")
        {           
            splitSpan[i]=setCharAt(splitSpan[i],lengthSpan-1,'>');
            splitSpan[i]=splitSpan[i]+"</span>";
        }
        else
        {
            splitSpan[i]=splitSpan[i]+">";
        }
    }
    

    function setCharAt(str,index,chr) {
        if(index > str.length-1) return str;
        return str.substr(0,index) + chr + str.substr(index+1);
    }
    

    【讨论】:

      【解决方案4】:

      我想不出有什么需要,因为它们会被浏览器自动转换。这可以通过以下方式证明:

      var div = document.createElement('div');
      div.innerHTML = '<span/>';
      var span = div.getElementsByTagName('span')[0];
      span.innerHTML = 'hello';
      alert(span.innerHTML);
      

      编辑:这似乎只适用于 XML 模式。

      【讨论】:

      • 并非总是如此。试试这个:var div = document.createElement('div'); div.innerHTML = '&lt;span/&gt;Hello'; var span = div.getElementsByTagName('span')[0]; alert(span.innerHTML); 如果跨度为空,则它不会包含 Hello。 XHTML 自闭合标签在 text/html 文档中不起作用。
      • 什么的。现在这很奇怪。
      • &lt;foo /&gt; 在 HTML 4(一个 foo 开始标记后跟一个大于号)与在 XHTML(一个 foo 自闭标记)或 HTML 5(一个 foo对于沉迷于 XML 的人来说,带有一些语法糖的开始标记)。浏览器往往根本不支持 HTML 4 语法,只支持 XML mime 类型的文档中的 XHTML 语法。 HTML 5 语法描述了浏览器在尝试实现 HTML 4 时的错误实现。
      • 非常感谢您提供的服务,但我认为这不是我需要的。由于自闭标签是由 xsl 文件创建的,我所能做的就是有一种方法将自闭标签更改为非自闭标签,您能帮帮我吗?
      • 你想用 Javascript 实现吗?
      猜你喜欢
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多