我正在製作HTML文本編輯器。 爲此,我有一個div contenteditable設置爲true。 爲了使選定的文本「粗體」,我試圖找到所選文本的節點。 我應該怎麼做,或者有什麼其他的方式來實現這個(特別是在ie)。用於Javascript中選定文本的nodeName
回答
首先,請注意,用戶的選擇是沒有直接關係的DOM節點。考慮這個HTML片段:
<p>
Now <b>is the time</b> for all <u>good men</u>
to come <i>to the <em>aid</em> of their</i>
country.
</p>
假設用戶的選擇從「時間」開始延伸到「國家」的末尾。有至少涉及12個節點:文本節點的
- 部分:一
<b>
節點「時間」 - 結束標記。
- 文本節點:「所有的」
- 完整
<u>
節點,一個子節點:- 文本節點「好男人」
- 文本節點:「來」
- 完整
<i>
節點,子節點:- 文本節點: 「到」
- 完整
<em>
節點,一個子節點: -
- 文本節點: 「援助」
- 文本節點:
- 部分文本節點的 「他們」: 「國家」 (注意,完整的文本節點包含句點,但選擇不包含)。
因此,您不能真正要求nodeName,因爲這裏有很多節點。
你可以,但是,問「什麼是完全封閉了用戶的選擇,即使它可能還附上未選擇的東西的容器的節點名稱?」
如果這是你想知道的,你需要TextRange.parentElement()方法(僅適用於IE,其他瀏覽器將使用range.commonAncestorContainer屬性)。
例如,在IE:
window.document.selection.createRange().parentElement().nodeName;
,讓你的節點名稱,當你在你的問題標題狀態。這與您希望將文本設爲粗體不同,您在問題文本中指出了這一點。如果您想將文字加粗,您可能需要TextRange.execCommand()方法。
window.document.selection.createRange().execCommand('Bold', false);
而這應該使選擇大膽。 A list of possible commands存在。
使用'TextRange'的'execCommand()'方法顯然是IE瀏覽器,如果您正在使用該選擇,則不必要。 'document.execCommand()'也可以工作,適用於所有主流瀏覽器。否則,很好的答案。 – 2011-04-15 21:08:21
謝謝Chris.Great的回答。 – facebook 2011-04-16 07:22:47
https://developer.mozilla.org/en/Rich-Text_Editing_in_Mozilla#Internet_Explorer_Differences – facebook 2011-04-16 18:46:00
這將返回節點名稱爲你但是你決定要選擇的文本:
$("your-selector-here").context.nodeName;
- 1. 使用JavaScript基於HTML中的選定選項生成文本
- 2. 將範圍應用於javascript中的選定文本
- 3. 使用javascript檢測文本區域中的選定文本
- 4. 使用Javascript複製選定的文本?
- 5. 如何將javascript應用於textarea的選定文本?
- 6. 使用Javascript縮進選定文本
- 7. 使選定文本變粗使用JavaScript
- 8. 插入文本到選定的文本框使用Javascript
- 9. 使用JavaScript來環繞選定的文本在一個文本
- 10. 使用JavaScript選中的文本框
- 11. 更改選定文本的顏色Javascript
- 12. Javascript:記住文本的選定範圍
- 13. 無法從文本框中使用JavaScript獲取選定的文本?適用於Firefox而不是IE?
- 14. php DOMDocument nodeName屬性返回'#text'與nodeName
- 15. 使用javascript在Gridview中更改dropdownlist的選定文本
- 16. 使用Javascript獲取移動Safari中的選定文本
- 17. 在Qwebview中使用javascript顯示選定的文本
- 18. 在javascript中更改選擇框的選定文本
- 19. 啓用文本選擇javascript
- 20. 文本框中的選定文本
- 21. 將粗體或斜體應用於UITextView中的選定文本
- 22. Javascript用於查找文本框中文本的值
- 23. iframe中的選定文本
- 24. Vue.js nodeName的可變
- 25. 如何確定基於RadioButtonList選擇的文本框將做什麼 - 使用JavaScript
- 26. 顯示隨機文本基於複選框選擇(JavaScript)的
- 27. 如果選定的文本是HTML,如何使用JavaScript獲取選定的DOM?
- 28. TXMLNodeList NodeName #text
- 29. 使用JavaScript獲取可見到用戶選定的文本
- 30. 使用javascript獲取使用格式的選定文本
你是什麼意思的「所選文本的節點」? – 2011-04-15 18:31:13
[This](http://blog.siteroller.net/understanding-javascript-selection-and-range)and [this](http://blog.siteroller.net/understanding-the-js-range-object-部分2家)是偉大的文章,解釋如何得到選擇。 – 2011-04-15 19:53:40