Join the AMA (Ask Me Anything) with the Firefox leadership team to celebrate Firefox 20th anniversary and discuss Firefox’s future on Mozilla Connect. Mark your calendar on Thursday, November 14, 18:00 - 20:00 UTC!

搜索 | 用户支持

防范以用户支持为名的诈骗。我们绝对不会要求您拨打电话或发送短信,及提供任何个人信息。请使用“举报滥用”选项报告涉及违规的行为。

详细了解

In a DIV with contenteditable, adding a space at the end of a word causes a BR tag to be added

  • 2 个回答
  • 3 人有此问题
  • 7 次查看
  • 最后回复者为 Florin

more options

Hi, In a DIV element with contenteditable, I have only 1 word which is bold, italic and underlined. This is the HTML content of the DIV element (divObj.innerHTML):

<u><em><strong>TEST</strong></em></u>

If I put the caret at the end of the word and hit SPACE, 1 space is inserted (visible); but the innerHTML is this:

<u><em><strong>TEST <br></strong></em></u>

so there's a space, but also a BR tag. Why is there a BR tag added when only SPACE was pressed?

sample test.html:

<script>
function showhtml() {
	alert(document.getElementById("mydiv").innerHTML);
}
</script>
<div id="mydiv" style="width:500px; height:100px; border:1px solid blue;" contenteditable><u><em><strong>TEST</strong></em></u></div>
<input type="button" value="show html" onclick="showhtml()">
Hi, In a DIV element with contenteditable, I have only 1 word which is bold, italic and underlined. This is the HTML content of the DIV element (divObj.innerHTML): &lt;u&gt;&lt;em&gt;&lt;strong&gt;TEST&lt;/strong&gt;&lt;/em&gt;&lt;/u&gt; If I put the caret at the end of the word and hit SPACE, 1 space is inserted (visible); but the innerHTML is this: &lt;u&gt;&lt;em&gt;&lt;strong&gt;TEST&nbsp;&lt;br&gt;&lt;/strong&gt;&lt;/em&gt;&lt;/u&gt; so there's a space, but also a BR tag. Why is there a BR tag added when only SPACE was pressed? sample test.html: <pre> &lt;script> function showhtml() { alert(document.getElementById("mydiv").innerHTML); } &lt;/script&gt; &lt;div id="mydiv" style="width:500px; height:100px; border:1px solid blue;" contenteditable&gt;&lt;u&gt;&lt;em&gt;&lt;strong&gt;TEST&lt;/strong&gt;&lt;/em&gt;&lt;/u&gt;&lt;/div&gt; &lt;input type="button" value="show html" onclick="showhtml()"&gt; </pre>

由cor-el于修改

所有回复 (2)

more options

That <br> tag may already have been there by default and wasn't removed when you entered that text.

more options

Have you tried the test code I ? There's no BR initially in the DIV. The initial DIV content is exactly the one mentioned in the question: so only U, EM and STRONG tags around the word TEST. No BRs. And you can verify that with the test code I posted in the question. Initially there's no BR tag, but after I add a SPACE at the end of the word, a BR tag is also added. Also, if I hit ENTER 1 time, I get 2 BR tags instead of 1.

It also happens if the DIV's initial content is just TEST (the tags U, EM and STRONG are not actually needed to reproduce this problem). And if you delete all text, there's still a BR tag returned.

Anyway, I noticed that the bogus BR tag has the attribute _moz_dirty. So it's probably used internally by Firefox's DOM engine. But even so, it shouldn't be returned by the innerHTML property of the DIV node, since it's not actually part of the content.

由Florin于修改