JS document.selection.createRange方法

document.selection.createRange() 根据当前文字选择返回 TextRange 对象,或根据控件选择返回 ControlRange 对象。

配合 execCommand,在 HTML 编辑器中很有用,比如:文字加粗、斜体、复制、粘贴、创建超链接等。

 

 

实例一:

<textarea cols=50 rows=15>

哈哈。我们都是新生来得。大家都来相互帮助呀。这样我们才能进步,我们才能赚大钱!</textarea>

<input type=button value=选择字后点击我看看 οnclick=alert(document.selection.createRange().text)>

</form>

 

 

实例二:

<body>

<textarea name="textfield" cols="50" rows="6">就是现在文本域里有一段文字,当你选种其中几个字后点击一个按钮或者链接会弹出一个对话框,对话框的信息就是你选中的文字

哪位老大能解决的呀?请多多帮忙!!!谢谢

</textarea>

<input type="button" value="showSelection" οnclick="alert(document.selection.createRange().text)">

<input type="button" value="showclear" οnclick="alert(document.selection.clear().text)">

<input type="button" value="showtype" οnclick="alert(document.selection.type)">

<textarea name="textfield" cols="50" rows="6" οnselect="alert(document.selection.createRange().text)">就是现在文本域里有一段文字,当你选种其中几个字后点击一个按钮或者链接会弹出一个对话框,对话框的信息就是你选中的文字

哪位老大能解决的呀?请多多帮忙!!!谢谢

</textarea>

</body>

 

 

实例三:选中Input中的文本

 

<SCRIPT LANGUAGE="JavaScript">

<!--

function test2()

{

var t=document.getElementById("test")

var o=t.createTextRange()

alert(o.text)

o.moveStart("character",2)

alert(o.text)

o.select()

}

//-->

</SCRIPT>

<input type='text' id='test' name='test'><input type=button οnclick='test2()' value='test' name='test3'>

对textarea中的内容,进行选中后,加效果

<script language="JavaScript">

<!--

function bold(){

Qr=document.selection.createRange().text;

if(!Qr || document.selection.createRange().parentElement().name!='description')

{

txt=prompt('Text to be made BOLD.','');

if(txt!=null && txt!='') document.form1.description.value+=''+txt+'';

}

else{

document.selection.createRange().text=''+document.selection.createRange().text+'';

document.selection.empty();

}

}

//-->

</script>

<input type="button" value="加粗" οnclick="bold();" />

<textarea name="description" style="width: 436px; height: 296px">选中我,点击加粗</textarea>

 

 

实例四:javascript捕获到选中的网页中的纯文本内容

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />

<title>鼠标取词</title>

<script>

function getSel()

{

var t=window.getSelection?window.getSelection():(document.getSelection?document.getSelection():(document.selection?document.selection.createRange().text:""))

document.forms[0].selectedtext.value = t;

}

</script></head>

<body οnmοuseup="getSel()">

<form>

<textarea name="selectedtext" rows="5" cols="50"></textarea>

</form>

以上的代码可以捕获到选中的网页中的纯文本内容(不含HTML标签)

如果想获得包含html的内容,将document.selection.createRange().text改成document.selection.createRange().htmlText

</body>

</html>

### 使用 `selection.addRange` 方法 在浏览器的 DOM API 中,`Selection` 对象表示用户当前所选的内容区域。通过该对象可以操作文档中的文本选择范围。其中,`addRange` 是 `Selection` 的方法之一,用于向现有的选择中添加一个新的 `Range` 或 `StaticRange`。 以下是关于如何使用 `selection.addRange` 方法的具体说明: #### 基本语法 ```javascript selection.addRange(range); ``` - 参数 `range` 表示要添加到现有选择的一个有效的 `Range` 或 `StaticRange` 实例[^1]。 #### 浏览器兼容性注意事项 需要注意的是,在某些旧版浏览器中可能不支持此功能。现代主流浏览器如 Chrome, Firefox, Edge 和 Safari 都已实现对 `addRange` 的良好支持[^2]。 #### 示例代码 下面是一个简单的例子来展示如何创建并添加一个 Range 到 Selection: ```javascript // 获取 document 的 body 节点作为上下文 const body = document.body; // 创建新的 range 对象实例 let range = document.createRange(); // 设置 range 开始位置和结束位置 (这里假设有一个 id="example" 的元素存在) let exampleElement = document.getElementById('example'); if (exampleElement) { range.setStart(exampleElement.firstChild, 0); // 设定起始节点及偏移量 range.setEnd(exampleElement.lastChild, exampleElement.textContent.length); // 结束设定 let sel = window.getSelection(); // 得到全局的选择对象 if (!sel.rangeCount || !sel.getRangeAt(0).intersectsNode(exampleElement)) { sel.removeAllRanges(); // 清除之前所有的 ranges 如果有必要的话 sel.addRange(range); // 将新定义好的 range 加入 selection } } ``` 上述脚本首先定位了一个特定 HTML 元素内部的所有子内容作为一个可选取的区间,并将其加入用户的当前选择状态之中[^3]。 #### 关键点解释 - **document.createRange()**: 这是用来初始化一个新的 `Range` 对象的方法。 - **setStart(node, offset)** 及其对应设置终点的方法用来指定这个区间的边界在哪里。 - **window.getSelection().removeAllRanges()** 在重新定义前清除了任何现存的选择以防冲突或重复叠加效果[^4]。 #### 局限性和替代方案 尽管可以直接利用 `addRange`, 不同场景下也可能需要考虑其他方式比如直接修改 DOM 文字节点或者采用更高级别的框架工具处理复杂的交互逻辑[^5]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值