2014-03-29 44 views
5

請參閱http://jsfiddle.net/4aQtk/3/formatBlock命令不會覆蓋列表項現有塊

我試圖通過execcommand("formatBlock",...)改變li風格。它在正常的段落節點上運行良好,但在列表項上生成節點。

Firefox 27:OK,樣式元素(p,h1,h2)只包含li元素中的文本。 (預期)

<ul> 
    <li> 
     <h1>text</h1> 
    </li> 
    <li>another text</li> 
</ul> 

鉻33:失敗,formatBlock命令制動向下ul成幾個ul S和與風格元素包裹ul

<h1> 
    <ul> 
     <li> 
      text 
     </li> 
    </ul> 
</h1> 
<ul> 
    <li>another text</li> 
</ul> 

如何防止在其上創建節點?

回答

1

如果您將li的內容換成div它可以正常工作。

<ul> 
    <li><div>list item 1</div></li> 
    <li><div>list item 2</div></li> 
    <li><div>list item 3</div></li> 
</ul> 

H1標籤不是一個無序列表有效的小孩所以它種包裝它的父UL之外,並提出了H1標籤裏面新的UL。因爲h1只是取代div,所以再也沒有問題了。

我希望這有助於。

編輯:

,它的工作原理與段落是它,它只是取代了P標籤與H1的所以最好的辦法應該是,如果H1的是段落內的事實。

+0

謝謝您的調查! – lqez

1

https://developer.mozilla.org/en-US/docs/Web/API/document.execCommand

添加圍繞包含當前選擇的行的HTML塊式標籤,取代含如果存在(在Firefox行了塊元件,BLOCKQUOTE是例外 - 它將包裹的任何含塊元素)。需要將標記名字符串作爲值參數傳入。幾乎所有的塊樣式標籤都可以使用(例如「H1」,「P」,「DL」,「BLOCKQUOTE」)。 (Internet Explorer支持只有標題標籤H1 - H6,地址和PRE,其中還必須包括標籤定界符<>,如「」。)

<li>元素代表項目的列表,爲此該formatBlock COMAND將使用塊元素(p,h1,...)將其包裝在列表中。由於這不適用於li元素,因此列表被拆分爲多個列表,並且「要格式化的列表」被Block元素包裹。

因爲你的代碼始終觸發li元素上,這是一次又一次地做,因爲你是執行formatingcomand,這是不打算對這種元素的使用。 @Steven Vanden Broucke發佈了一個解決方案,您可以如何避免這種情況。

因爲它是不完全指定應如何處理,我建議這樣做。

編輯: 我爲此問題在鉻創建了一個錯誤報告。 (https://code.google.com/p/chromium/issues/detail?id=372925&thanks=372925&ts=1400009358