使用Javascript中的document.innerHTML自我关闭标记问题

时间:2011-09-13 22:37:34

标签: javascript html tags innerhtml

我正在为一个网站编写一个用于Firefox(Greasemonkey),Opera和Chrome的浏览器插件。问题是,当我将document.innerHTML加载到变量中时,

<form name="foo" action="foo.php" method="get">
<td id="td">text:
<input name="k" type="text" />
&nbsp;</td>
</form>

...网站上面的原始代码(我正在编写插件)转换为

<form name="foo" action="foo.php" method="get">
<td id="td">text:
**<input name="k" type="text">**
&nbsp;</td>

......这个。如您所见,自动关闭<input />标记不再关闭,</form>标记也消失了。我几乎所有的网络都搜索过,但我读过的解决方案都没有解决我的问题。

2 个答案:

答案 0 :(得分:4)

获取</form>时,我会在Firefox中显示结束.innerHTML标记。

我建议丢失的标签是由于你的标记,我很确定无效:

  <!-- A <form> wrapping a <td> ? -->
<form name="foo" action="foo.php" method="get">
    <td id="td">text:
        <input name="k" type="text" />
        &nbsp;
    </td>
</form>

<td>元素的父级应为<tr>,而不是<form>

鉴于此标记:

<table>
    <tr>
        <form name="foo" action="foo.php" method="get">
            <td id="td">text:
                <input name="k" type="text" />
                &nbsp;
            </td>
        </form>
    </tr>
</table>

... Firefox为innerHTML提供了<table>

<tbody>
    <tr>
        <form name="foo" action="foo.php" method="get"></form>
            <td id="td">text:
                <input name="k" type="text">
                &nbsp;
            </td>

    </tr>
</tbody>

尝试更正无效标记。

DEMO: http://jsfiddle.net/grM4c/

答案 1 :(得分:0)

好吧,看看你的代码,你需要在中间创建一个带有未闭合TD的表单。

<form name="foo" action="foo.php" method="get">
<td id="td"><span>text:<input name="k" type="text" /></span></td>
</form>

试试这种方式。