2

我想在页面上的 H1 元素之后插入几个打开的 DIV 标记,而不插入相应的结束标记(因为结束标记包含在我无权访问的包含的页脚文件中)。

即现有代码:

<body>
<h1>Heading One</h1>
... page content...
</div>
</div>
</body>

新代码:

<body>    
<h1>Heading One</h1>
<div id="foo">  
<div id="baa">  
... page content...
</div>
</div>
</body>

DOM 方法将 div 作为完整(封闭)元素插入,“createTextNode”插入转义字符,“innerHTML”需要插入一个元素。甚至尝试在没有任何运气的情况下使用 document.write 插入脚本元素。

任何想法(jQuery 会很好)?

更新 以下工作:

document.body.innerHTML = document.body.innerHTML.replace('</h1>','</h1><div id="foo"><div id="baa">')

正如Asad所指出的,解决方案(当然现在看起来很明显)是在 HTML 上使用字符串方法而不是 DOM 方法。

4

5 回答 5

3

如果您正在处理 DOM 操作,请使用 DOM 操作方法。如果您正在处理 HTML 操作,请使用字符串操作方法。

h1.parentElement.innerHTML = h1.parentElement.innerHTML.replace("<h1>Heading One</h1>","<h1>Heading One</h1><div><div>");
于 2012-11-21T16:23:51.680 回答
0

忘记 DOM 方法,使用 .replace() 将其作为字符串插入。

于 2012-11-21T16:21:48.403 回答
0

我认为这将回答您的问题,这完全是关于有效的 XML 格式。

http://www.w3schools.com/xml/xml_syntax.asp

于 2012-11-21T16:20:40.907 回答
0

你的方法从根本上是错误的。浏览器解析它所看到的 DOM,并自动关闭任何应该关闭的标签。使用 JavaScript 只插入开始标记是不可能的。

您说“结束标签包含在我无权访问的包含的页脚文件中。” 没有打开的关闭标签会被忽略,因此就 DOM 解析器而言,这些关闭标签不存在。

您的解决方案是:

  1. 将开始标签放在标题中,或服务器端的其他位置,或
  2. 使用 JavaScript 抓取以下所有 DOM 元素,包括页脚,并将.wrap()它们全部放在所需的 div 中。
于 2012-11-21T16:25:18.150 回答
0

这种做法似乎有点不正统,但也许这样的做法会有所帮助。

现有的 HTML

<h1 id="testH1">Test H1</h1>
<div id="existingDiv">
    <div id="existingDivContent">Existing Div Content</div>
</div>

新的 HTML

<h1 id="testH1">Test H1</h1>
<div id="newDiv">
    <div id="existingDiv">
        <div id="existingDivContent">Existing Div Content</div>
    </div>
</div>

JS

javascript 是相当初级的,但我认为这个概念可以用来安全和正确地实现你的目标。

$(document).ready(function() {
    //-- parent node you wish to copy
    var existingDiv = $('#existingDiv');

    //-- new parent div node
    var newDiv = $('<div id="newDiv">');

    //-- where we want to insert the new parent node
    var testH1 = $('#testH1');

    //-- stuff our previous parent node into our new parent node
    newDiv.html(existingDiv);

    //-- insert into the DOM
    testH1.after(newDiv);

});

http://jsfiddle.net/8qzvN/

于 2012-11-21T16:39:55.223 回答