您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Get the selected text along with text before and after the selection
当前为
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.cn-greasyfork.org/scripts/528822/1547501/Selection%20Context.js
// ==UserScript== // @name Selection Context // @namespace http://tampermonkey.net/ // @version 0.1.0 // @description Get the selected text along with text before and after the selection // @author RoCry // @license MIT // ==/UserScript== /** * Gets the selected text along with text before and after the selection * @returns {Object} Object containing selectedText, textBefore, and textAfter */ function GetSelectionContext() { const selection = window.getSelection(); if (!selection || selection.rangeCount === 0 || selection.toString().trim() === '') { return { selectedText: null, textBefore: null, textAfter: null, paragraphText: null }; } const selectedText = selection.toString().trim(); // Get the range of the current selection const range = selection.getRangeAt(0); // Get the paragraph containing the selection let paragraphElement = range.commonAncestorContainer; // Navigate up to find a paragraph or meaningful content container while (paragraphElement && (paragraphElement.nodeType !== Node.ELEMENT_NODE || !['P', 'DIV', 'ARTICLE', 'SECTION', 'LI'].includes(paragraphElement.tagName))) { paragraphElement = paragraphElement.parentNode; } // Get the paragraph text let paragraphText = ''; if (paragraphElement) { paragraphText = paragraphElement.textContent.trim(); if (paragraphText.length > 500) { paragraphText = paragraphText.substring(0, 497) + '...'; } } // Create ranges for text before and after selection let textBefore = ''; let textAfter = ''; try { // Get text before selection const beforeRange = range.cloneRange(); beforeRange.setStart(paragraphElement || document.body, 0); beforeRange.setEnd(range.startContainer, range.startOffset); textBefore = beforeRange.toString().trim(); // Get text after selection const afterRange = range.cloneRange(); afterRange.setStart(range.endContainer, range.endOffset); afterRange.setEnd(paragraphElement || document.body, paragraphElement ? paragraphElement.childNodes.length : document.body.childNodes.length); textAfter = afterRange.toString().trim(); // Limit the length of before/after text to be reasonable if (textBefore.length > 250) { textBefore = '...' + textBefore.substring(textBefore.length - 250); } if (textAfter.length > 250) { textAfter = textAfter.substring(0, 250) + '...'; } } catch (e) { console.error('Error getting text before/after selection:', e); } return { selectedText, textBefore, textAfter, paragraphText }; } // Export the function for use in other scripts if (typeof module !== 'undefined' && module.exports) { module.exports = { GetSelectionContext }; } else { // For direct browser use window.SelectionUtils = window.SelectionUtils || {}; window.SelectionUtils.GetSelectionContext = GetSelectionContext; }