브라우저 간 기능을 위해 작성하기가 어렵습니다. How to bind a handler to a selection change on window?을 참조하십시오.
mousedown
, mouseup
, touchstart
, touchend
과 같은 이벤트를 캡처해야합니다. 이러한 이벤트의 조합은 좋을 수도 있습니다.
function addEvent(elem, event, func) {
if (elem.addEventListener) {
elem.addEventListener(event, func, false);
} else {
elem.attachEvent('on' + event, func);
}
}
다음 window.getSelection
또는 document.selection
를 사용 getSelectedHTML()
이다.
function getSelectedHTML(event) {
// http://www.w3.org/TR/2000/REC-DOM-Level-2-Traversal-Range-20001113/ranges.html
var range = window.getSelection ? window.getSelection() /* W3C */
: document.getSelection ? document.getSelection() /* redundant? */
: document.selection ? document.selection.createRange() /* IE */
: null;
if (range) {
if (range.getRangeAt) {
range = range.getRangeAt(0);
} else if (range.setStart) { // Safari 1.3
// Create range by itself
range.setStart(range.anchorNode, range.anchorOffset);
range.setEnd(range.focusNode, range.focusOffset);
} else {
// IE is already reange
}
var html = null, link = null;
if (range.cloneContents) {
var dummy = document.createElement('div');
dummy.appendChild(range.cloneContents());
html = dummy.innerHTML;
} else {
html = range.htmlText; /* IE */
}
if (html) {
link = html.match(/<a.*?href\s*?=['"](.*?)['"]/);
return link ? link[1] : null;
}
}
return null;
}
이 코드는 특히 이전 브라우저에서 확인해야합니다. 여기
샘플 바이올린입니다 :
http://jsfiddle.net/tokkonoPapa/CQ63a/
아, 거의 같은 대답에서 찾을 수있다 [자바 스크립트와 HTML 텍스트를 선택하려면 어떻게해야합니까?] (http://stackoverflow.com/questions/5643635/how- to-get-selected-html-text-with-javascript)를 사용하십시오. – tokkonopapa
좋은 결과가 있지만 문제가 하나 있습니다. 링크 또는 링크 단편 만 선택하면이 빈 값이 반환됩니다. – kicaj