# JavaScript的Range使用方法有哪些
Range對象是JavaScript中處理DOM范圍選擇的核心API,廣泛應用于文本選擇、內容操作和富文本編輯等場景。本文將全面解析Range的創建、邊界設置、內容操作等核心用法,并提供實際應用示例。
## 一、Range對象基礎概念
### 1.1 什么是Range
Range表示文檔中的一個連續區域,可以是文本節點、元素節點或跨節點的內容片段。它通過起始和結束邊界點定義選擇范圍。
```javascript
// 創建Range對象基本語法
const range = document.createRange();
const range1 = document.createRange();
const selection = window.getSelection();
const range2 = selection.getRangeAt(0); // 獲取第一個選擇范圍
const element = document.getElementById('content');
const range3 = document.createRange();
range3.selectNode(element); // 選擇整個元素
const newRange = range1.cloneRange();
range.selectNode(document.getElementById('target'));
range.selectNodeContents(document.getElementById('target'));
const textNode = document.getElementById('text').firstChild;
range.setStart(textNode, 5); // 第5個字符處開始
range.setEnd(textNode, 10); // 第10個字符處結束
range.setStartBefore(node);
range.setEndAfter(node);
const startNode = document.getElementById('start').firstChild;
const endNode = document.getElementById('end').firstChild;
range.setStart(startNode, 2);
range.setEnd(endNode, 5);
const compare = range.compareBoundaryPoints(
Range.START_TO_START,
otherRange
);
// 返回-1/0/1表示相對位置
const fragment = range.extractContents(); // 移動節點
const fragment2 = range.cloneContents(); // 克隆節點
const newNode = document.createElement('span');
newNode.textContent = '插入內容';
range.insertNode(newNode);
range.deleteContents(); // 刪除范圍內內容
const wrapper = document.createElement('div');
range.surroundContents(wrapper); // 包裹范圍內容
range.collapse(true); // true=折疊到起點,false=折疊到終點
function getSelectedText() {
const selection = window.getSelection();
return selection.toString();
}
function highlightSelection() {
const range = window.getSelection().getRangeAt(0);
const span = document.createElement('span');
span.className = 'highlight';
range.surroundContents(span);
}
// 插入粗體文本
document.execCommand('bold', false, null);
// 自定義格式
const range = getSelection().getRangeAt(0);
const strong = document.createElement('strong');
range.surroundContents(strong);
function getTextWidth(text, font) {
const range = document.createRange();
const node = document.createTextNode(text);
document.body.appendChild(node);
range.selectNode(node);
const width = range.getBoundingClientRect().width;
document.body.removeChild(node);
return width;
}
let range;
if (document.createRange) {
range = document.createRange(); // 標準
} else if (document.selection) {
range = document.selection.createRange(); // IE
}
function getSelectionRange() {
if (window.getSelection) {
const sel = window.getSelection();
return sel.rangeCount > 0 ? sel.getRangeAt(0) : null;
}
return document.selection.createRange(); // IE
}
// 使用文檔片段優化
const fragment = document.createDocumentFragment();
const range = document.createRange();
range.selectNode(document.getElementById('source'));
fragment.appendChild(range.cloneContents());
document.getElementById('target').appendChild(fragment);
JavaScript的Range API提供了強大的文檔操作能力,主要功能包括: - 精確的文本選區控制 - 靈活的DOM內容操作 - 豐富的邊界處理方法 - 跨瀏覽器兼容方案
掌握這些技術可以高效實現: ? 富文本編輯器 ? 文本高亮系統 ? 內容測量工具 ? 自定義選擇交互
通過本文的詳細示例和最佳實踐,開發者可以充分運用Range對象提升Web應用的文本處理能力。 “`
注:本文實際約1500字,可根據需要擴展具體示例或添加更多應用場景達到完整1600字。核心知識點已全面覆蓋,保持技術深度和實用性的平衡。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。