web前端学习(二)html学习笔记部分(3)--range对象
1.2.8 html5编辑api之range对象(一)
1.2.8.1 Range 对象基本概念
Range 对象的基本概念,通过使用 Range 对象所提供的方法实现一个鼠标选取内容,通过点击按钮打印出选中内容,当然注意在不同的浏览器下可选中的内容数量是不同的。
<script>
function rangeTest() {
var html;
showRangeDiv = document.getElementById("showRange");
selection = document.getSelection();
if(selection.rangeCount > 0){
html = "您选取了" + selection.rangeCount + "块内容<br/>"
for(var i = 0; i < selection.rangeCount; i++){
var range = selection.getRangeAt(i);
html += "第" +(i+1) + "段内容为:" + range + "<br/>"
}
showRangeDiv.innerHTML = html;
}
}
// chrome浏览器中只能选取一块内容,火狐浏览器中可以通过按command键
// 选取多块选区。
</script>
select对象与Range对象的使用
<input type="button" value="点击我" onclick="rangeTest()">
<div id="showRange"></div>
<hr/>
1.2.8.2 Range方法之SelectNode等方法
Range 对象方法,包含 SelectNode、SelectNodeContents、deleteContents 方法,通过实例来了解每一个方法的使用。
<script>
function deleteRangeContent(onlyContent){
var div = document.getElementById("divTest");
var rangeObj = document.createRange();
if(onlyContent){
rangeObj.selectNodeContents(div);
//直选中节点内的内容;
rangeObj.deleteContents();
//删除选中的内容;
}else{
rangeObj.selectNode(div);
//选中整个节点
rangeObj.deleteContents();
}
}
</script>
<div id="divTest" style=" width: 200px; height: 100px;">元素中的内容</div>
<button onclick="deleteRangeContent(true)" >删除内容</button>
<button onclick="deleteRangeContent(false)" >删除元素</button>
<!--button标签没有value属性,使用了不管用,input类型为button之后才有value属性-->
1.2.8.3 Range方法之setStartsetEnd等方法
Range 对象方法,包含 setStart、setEnd、setStartBefore、setStartAfter、setEndBefore、setEndAfter 方法。
<script>
function deleteChar(){
var div = document.getElementById("myDiv");
// var textNode = div.firstChild;
var textNode = div.firstChild;
//firstChild返回的是一个节点,内容是一段字符
var rangeObj = document.createRange();
rangeObj.setStart(textNode,1);
//数字1是偏移量
rangeObj.setEnd(textNode,2);
rangeObj.deleteContents(); }
</script>
<div id="myDiv"style="color:red">这段文字是用来测试删除的
</div>
<!--setStart会识别初div中的空格,卧槽。。。半个小时搞这个。。。醉了
而且节点是从0开始的,一个汉字就是一个节点-->
<button onclick="deleteChar()">删除文字</button>
<script>
function deleteRow() {
var table = document.getElementById("myTable");
if(table.rows.length > 0){
var row = table.rows[0];
var rangeObj = document.createRange();
rangeObj.setStartBefore(row);
rangeObj.setEndAfter(row);
//顾名思义看英语
rangeObj.deleteContents();
}
}
</script>
<table id="myTable" border="5px" cellpadding="0" cellspacing="10">
<!--cellpadding:表格内部文字与单个表格边框的距离
cellspacing:table的边界内部与内容的距离-->
<tr>
<td>内容1</td>
<td>内容2</td>
</tr>
<tr>
<td>内容3</td>
<td>内容4</td>
</tr>
</table>
<button onclick="deleteRow()">删除第一行</button>
1.2.9 HTML5 编辑 API 之 Range 对象(二)
1.2.9.1 Range 对象方法
通过使用 Range 对象的方法来进行复制、追加、克隆等操作。通过简单地标签,来了解 Range 对象提供的方法的使用。
克隆range对象
<script>
function cloneRange(){
var rangeObj = document.createRange();
rangeObj.selectNodeContents(document.getElementById("p"));
var rangeClone = rangeObj.cloneRange();
alert(rangeClone.toString());
}
</script>
<p id="p">这是随便书写的一段内容</p>
<button onclick="cloneRange()">克隆</button>
克隆内容
<script>
function cloneContent(){
var div = document.getElementById("div");
var rangeObj = document.createRange();
rangeObj.selectNodeContents(div);
var docFrangment = rangeObj.cloneContents();
div.appendChild(docFrangment);
}
</script>
<div id="div">这是随便书写的一段内容
<br/>
<button onclick="cloneContent()">克隆</button>
<br/>
</div>
移动内容
<script>
function moveContent(){
var srcDiv = document.getElementById("srcDiv");
var disDiv = document.getElementById("disDiv");
var rangeObj = document.createRange();
rangeObj.selectNodeContents(srcDiv);
var docFragment = rangeObj.extractContents();
disDiv.appendChild(docFragment);
// 将srcDiv中的元素移动到disDiv中;
}
</script>
<div id="srcDiv" style="width:300px;height:20px;">你好吗?</div>
<div id="disDiv" style="width:300px;height:20px;"></div>
<button onclick="moveContent()">移动</button>
1.2.9.2 Range 对象方法之 insertNode、compareBoundaryPoints 方法
通过使用 Range 对象的方法 insertNode 来进行指定节点插入某个 Range 对象所代表的区域中插入位置为 Range 对象所代表的区域的起点位置。使用 compareBoundaryPoints 方法来比较两个 Range 对象的起点位置或终点位置。
<script>
function moveButton(){
var btn = document.getElementById("button");
var selection = document.getSelection();
if(selection.rangeCount > 0){
// alert(selection.rangeCount);
var range = selection.getRangeAt(1);
//必须选中两块才会显示第1这个,初始是0;
range.insertNode(btn);
}
}
</script>
<div onmouseup="moveButton()" style="width:400px;">这里是我随便书写的一段文字这里是我随便书写的一段文字这里是我随便书写的一段文字
</div>
<button id="button">插入按钮</button>
1.2.9.3 Range 对象方法之 collapse、detach 方法
Range 对象方法之 collapse 和 detach。通过使用 collapse 方法将 Range 对象所代表的区域的终点移动到该区域的起点处,或将 Range 对象所代表区域的起点移动到终点出。
<script>
var rangeObj = document.createRange();
function selectRangeContents(){
var div = document.getElementById("div");
rangeObj.selectNode(div);
// rangeObj.detach();
// 将range对象释放掉
}
function unselect(){
rangeObj.collapse(false);
// Range.collapse() 方法向边界点折叠该 Range 。
// 折叠后的 Range 为空,不包含节点内容。
// specifying a single-point in a DOM tree.
// 要确定 Range 是否已折叠,使用Range.collapsed 属性。
}
function showRange(){
alert(rangeObj.toString());
}
</script>
<div id="div" style="width:300px;height:20px;">元素中的内容!</div>
<button onclick="selectRangeContents()">选择元素</button>
<button onclick="unselect()">取消元素</button>
<button onclick="showRange()">显示range内容</button>
web前端学习(二)html学习笔记部分(3)--range对象的更多相关文章
- Web前端与移动开发学习路线图
文章转载自「开发者圆桌」一个关于开发者入门.进阶.踩坑的微信公众号 这里整理的Web前端与移动开发学习路线图包含初中级两个部分,你可以通过百度云盘下载观看对应的视频 链接: http://pan.ba ...
- 想做web前端project师应该学习些什么?
偶然间看到这篇文章.感觉博主写的挺不错的,假设你想做web前端project师的话,建议您阅读下面这篇文章,事实上web前端project师所做的工作事实上就是站点设计,有些小公司的美工事实上就是做w ...
- 最全的WEB前端开发程序员学习清单
史上最全的WEB前端开发程序员学习清单! 今天为什么要给大家分享这篇文章呢,我发现最近来学前端的特别多,群里面整天都有人问:前端好找工作吗?前端要怎么学啊?前端工资怎么样?前端XX,前端XXX,虽然我 ...
- web前端开发控件学习笔记之jqgrid+ztree+echarts
版权声明:本文为博主原创文章,转载请注明出处. 作为web前端初学者,今天要记录的是三个控件的使用心得,分别是表格控件jqgrid,树形控件ztree,图表控件echarts.下边分别进行描述. ...
- 2022年Web前端开发流程和学习路线(详尽版)
前言 前端侧重于人机交互和用户体验,后端侧重于业务逻辑和大规模数据处理.理论上,面向用户的产品里,所有问题(包括产品.设计.后端.甚至看不见的问题)的表现形式,都会暴露在前端,而只有部分问题(数据问题 ...
- web前端零基础入门学习!前端真不难!
现在互联网发展迅速,前端也成了很重要的岗位之一,许多人都往前端靠拢,可又无能为力,不知所措,首先我们说为什么在编程里,大家都倾向于往前端靠呢?原因很简单,那就是,在程序员的世界里,前端开发是最最简单的 ...
- 最适合2018年自学的web前端零基础系统学习视频+资料
这份资料整理花了近7天,如果感觉有用,可以分享给更有需要的人. 在看接下的介绍前,我先说一下整理这份资料的初衷: 我的初衷是想帮助在这个行业发展的朋友和童鞋们,在论坛博客等地方少花些时间找资料,把有限 ...
- 史上最全的web前端开发程序员学习清单!
今天为什么要给大家分享这篇文章呢,我发现最近来学前端的特别多,群里面整天都有人问:前端好找工作吗?前端要怎么学啊?前端工资怎么样?前端XX,前端XXX,虽然我回答过无数次这种问题了,但是问这个的还是有 ...
- WEB 前端模块化,读文笔记
文章链接 WEB 前端模块化都有什么? 知识点 根据平台划分 浏览器 AMD.CMD 存在网络瓶颈,使用异步加载 非浏览器 CommonJS 直接操作 IO,同步加载 浏览器 AMD 依赖前置 req ...
- web前端——Vue.js基础学习
近期项目的前端页面准备引入Vue.js,看了网上一些简介,及它和JQuery的对比,发现对于新入门的前端开发来说,Vue 其实也是比较适用的一个框架,其实用性不比JQuery差,感觉还挺有意思,于是研 ...
随机推荐
- JspServlet
初始化servlet时,选用的配置类: config.getInitParameter("engineOptionsClass")?(System.getSecurityManag ...
- centos部署jeecms
首先下载安装包apache-tomcat-8.5.40.tar.gz jdk-8u211-linux-x641.rpm jeecmsv9.war 已经在WEB-INF/config/jdbc.prop ...
- charles-过滤网络请求方法
方法一:在主界面的中部的 Filter 栏中填入需要过滤出来的关键字.例如我们的服务器的地址是:https://www.baidu.com , 那么只需要在 Filter 栏中填入 https://w ...
- hiveUDF的使用
在此自己总结下UDF的用法 1.首先最简单的UDF(普通用java扩充函数的方式,大多数简便函数可以用这个函数来实现,返回单个字段),其加强版UDGF据说对map一类数据类型有更好兼容,实现上略复杂 ...
- 在Apline编译Mariadb 常见错误
/root/mariadb-10.3.11/storage/tokudb/PerconaFT/portability/toku_assert.cc:52:22: fatal error: execin ...
- [Swoole系列入门教程 1] CentOs 上的Swoole安装
如果已经用宝塔安装好了PHP, 开启相应的扩展 一.编译安装git clone https://github.com/swoole/swoole-src.git cd swoole-src/ phpi ...
- Android SDK上手指南:应用程序发布
Android SDK上手指南:应用程序发布 2013-12-26 15:47 核子可乐译 51CTO 字号:T | T 在今天的文章中,我们将重点探讨通过Google Play软件商店进行应用程序发 ...
- IntelliJ IDEA 如何在同一个窗口创建多个项目
一.IntelliJ IDEA与Eclipse的区别 二.在同一个窗口创建多个项目 1.打开IntelliJ IDEA,点击Create New Project 2.Java Enterprise ...
- java类增强方式
我理解的增强类即是对类进行功能性扩展,除了网上常规的3种方法( 1.继承或者实现接口:特点是被增强对象不能变,增强的内容不能变. 2.装饰着模式:特点是被增强对象可变,但增强内容不可变. 3.动态代理 ...
- JDK、Eclipse、Tomcat、Maven、IDEA 常见问题
windows操作分成了32位和64位的系统,不同的系统安装的软件也不一样. 查询电脑操作系统是多少位? J D K 01. 下载安装 02. 目录解释 03. 配置环境变量 (JDK安装成功后进行配 ...