我有這個網站獲取父元素與顯示模塊
<div id="editor" contenteditable="true">
This text is directly under div
<p>Some text under p tag. <span> Some under span tag</span> and this is another text</p>
<p>Another para</p>
</div>
<button>Get block level parent</button>
的Javascript
function getParentBlock() {
element = document.getSelection().focusNode;
while (p = element.parentNode) {
displaystyle = window.getComputedStyle(p, null).getPropertyValue('display');
if (displaystyle == 'block') {
return p;
}
element = element.parentNode;
}
}
function alertCurrentParent() {
alert(getParentBlock());
}
btn = document.querySelector('button');
btn.onclick = alertCurrentParent;
的的jsfiddle是在這裏:http://jsfiddle.net/shankardevy/aA8Kb/
現在,當我將光標放在文本中的「另一Para'或雙擊'Another Para'(在我的Mac中選擇整個段落),然後單擊按鈕「獲取塊級父級」,我將HTMLParagraphElement置於alert狀態。但是,當我將光標置於第一個段落(「p標記下的某些文本」),並且我單擊該按鈕時,我會在alert中獲得「HTMLParagraphElement」。當我雙擊選擇整個第一段的第二段,然後單擊按鈕時,我會得到「HTMLDivElement」。
我希望我的代碼能像第二段中那樣工作。即雙擊該句子並單擊該按鈕,它應該向我顯示「HTMLParagraphElement」。我怎麼做?
任何幫助非常感謝!
謝謝@barmar。你的代碼工作得很好。但是,也許這與你的代碼無關,但仍然是一個錯誤。看到更新的http://jsfiddle.net/shankardevy/aA8Kb/5/當我雙擊第一段並點擊按鈕時,它會顯示第二段的內容,這很奇怪。你能幫我調試嗎? – shankardevy
將focusNode更改爲anchorNode可解決此問題。然而,我仍然不明白爲什麼focusNode會出現bug,也就是說,doubleclick所做的選擇仍然顯示第一段,但爲什麼focusNode指向第二段? – shankardevy
'focusNode'是選擇結束的地方。我想當你選擇整個段落時,它會在下一個段落的開始處結束。 – Barmar