2011-10-23 87 views
5

我可以查詢(在jQuery意義上)DOM元素 - 而不是只是文本節點 - 完全由鼠標選擇?構建:選擇選擇器

+0

「高亮」意思是什麼?而且,更甚者,「部分突出」是什麼意思? – Jon

+0

看看這個:http://stackoverflow.com/questions/7803016/how-to-wrap-html-tag-for-jquery-mouseup-selection-wrods/7803559#7803559 –

+1

@Randomblue「selected」是更熟悉的術語... –

回答

2

這將讓你的所有,是完全選擇的要素:

var currentSelection = window.getSelection(); 
var firstRangeInSelection = currentSelection.getRangeAt(0); 
var commonAncestor = firstRangeInSelection.commonAncestorContainer; 

var nodesInSelection = $(commonAncestor).find("*").filter(function() { 
          return currentSelection.containsNode(this, false); 
         }); 

有關DOM選項的詳細信息,請this page

+0

+1,雖然它可以通過幾次檢查得到改進:首先,IE <9不支持'window.getSelection()',所以你應該檢查它的存在;第二,如果沒有選擇任何東西,'getRangeAt(0)'將會拋出一個錯誤,所以你應該檢查'currentSelection.rangeCount'是否大於零。 –

+0

實際上,如果選擇完全包含在單個文本節點中會發生什麼?我認爲你會得到一個空的jQuery對象。 –

1

你可以我的答案適應以下問題回到你一個jQuery對象,而不是一個數組,這應該是簡單的:

JS: Get array of all selected nodes in contentEditable div

然而,這不會在IE < 9工作,它不支持與其他瀏覽器相同的Selection對象。爲此,你需要另一種方法。有我自己的Rangy圖書館,如答案中提到的,但如果你需要支持沒有圖書館,那麼我可以把東西敲在一起。

+0

你是什麼意思而不是「數組」?我的解決方案也返回一個jQuery對象。對不起,如果你不是在說我:) –

+0

@Chris:我不是指你的答案。我曾經假設OP會想要一個jQuery集合,而不是一個數組,這就是我的鏈接所產生的答案。 –