我使用window.getSelection()來獲取選定的文本。 但是,如果我也選擇一個圖像,它也返回一個圖像的altof。getSelection沒有alt屬性和腳本在裏面?
例:
<img src="someSrc.jpg" alt="image_alt" /> My text here ...
,如果我選擇一個圖像也將返回
image_alt我在這裏的文字...
但我只需要
我的文字在這裏...
有沒有什麼辦法只有文本,沒有alt?
感謝很多
我使用window.getSelection()來獲取選定的文本。 但是,如果我也選擇一個圖像,它也返回一個圖像的altof。getSelection沒有alt屬性和腳本在裏面?
例:
<img src="someSrc.jpg" alt="image_alt" /> My text here ...
,如果我選擇一個圖像也將返回
image_alt我在這裏的文字...
但我只需要
我的文字在這裏...
有沒有什麼辦法只有文本,沒有alt?
感謝很多
最簡單的方法是使用toString()
選擇範圍的方法,即指定window.getSelection().toString()
t o在WHATWG's new Range spec的當前版本中做(儘管這是contrary to what some browsers do,可能會改變也可能不改變)。下面將與多個選擇的工作範圍(其Mozilla的支持),並且還在IE < 9.
的jsfiddle:http://jsfiddle.net/timdown/HkP2S/
代碼:
function getSelectionRangeText() {
var selText = "";
if (window.getSelection) {
var sel = window.getSelection(), rangeCount = sel.rangeCount;
if (rangeCount) {
for (var i = 0, rangeTexts = []; i < rangeCount; ++i) {
rangeTexts.push("" + sel.getRangeAt(i));
}
selText = rangeTexts.join("");
}
} else if (document.selection && document.selection.type == "Text") {
selText = document.selection.createRange().text;
}
return selText;
}
UPDATE
該解決方案包括<script>
和<style>
元素中的文字。要除去這些,可以在選擇範圍上使用cloneContents()
,並遍歷生成的文檔片段的DOM,僅從文本節點收集文本,該文本節點不包含在<script>
和<style>
元素中。你也可以擴展它以刪除CSS display: none
中的元素內的文本。
的jsfiddle:http://jsfiddle.net/timdown/HkP2S/2/
代碼:
function getSelectionRangeText() {
var selText = "", selTextParts = [];
function getNodeText(node) {
if (node.nodeType == 3) {
selTextParts.push(node.data);
} else if (node.hasChildNodes()
&& !(node.nodeType == 1 && /^(script|style)$/i.test(node.tagName))) {
for (var child = node.firstChild; !!child; child = child.nextSibling) {
getNodeText(child);
}
}
}
if (window.getSelection) {
var sel = window.getSelection(), rangeCount = sel.rangeCount;
if (rangeCount) {
for (var i = 0; i < rangeCount; ++i) {
getNodeText(sel.getRangeAt(i).cloneContents());
}
selText = selTextParts.join("");
}
} else if (document.selection && document.selection.type == "Text") {
selText = document.selection.createRange().text;
}
return selText;
}
非常感謝。但內聯腳本(javascript,css)存在問題。它也支持它。 Whan可以做到防止它? – Simon
@Syom:的確如此。在另一個答案中,您會遇到與'cloneContents()'/'textContent'解決方案相同的問題。如果這對你是一個問題,那麼你可以使用'cloneContents()'手動遍歷DOM。我會擴大我的答案。 –
@Syom:...完成。 –
試試這個:
window.getTextSelection = function() {
//First get HTML Fragment of selection
var html = window.getSelection().getRangeAt(0).cloneContents();
//Return only the text
return html.textContent||html.innerText;
}
在某些情況下,你可以簡單地通過CSS禁用用戶的選擇: 願你還可以通過禁用用戶爲圖像選擇實現這一目標:
img {
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-o-user-select: none;
user-select: none;
}
你有沒有考慮改變其使用'alt'屬性? –
我將在開源項目中使用它,所以我需要去掉所有需要的屬性。 – Simon
瀏覽器正在做什麼?在Firefox中測試了 –