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对象的更多相关文章

  1. Web前端与移动开发学习路线图

    文章转载自「开发者圆桌」一个关于开发者入门.进阶.踩坑的微信公众号 这里整理的Web前端与移动开发学习路线图包含初中级两个部分,你可以通过百度云盘下载观看对应的视频 链接: http://pan.ba ...

  2. 想做web前端project师应该学习些什么?

    偶然间看到这篇文章.感觉博主写的挺不错的,假设你想做web前端project师的话,建议您阅读下面这篇文章,事实上web前端project师所做的工作事实上就是站点设计,有些小公司的美工事实上就是做w ...

  3. 最全的WEB前端开发程序员学习清单

    史上最全的WEB前端开发程序员学习清单! 今天为什么要给大家分享这篇文章呢,我发现最近来学前端的特别多,群里面整天都有人问:前端好找工作吗?前端要怎么学啊?前端工资怎么样?前端XX,前端XXX,虽然我 ...

  4. web前端开发控件学习笔记之jqgrid+ztree+echarts

    版权声明:本文为博主原创文章,转载请注明出处.   作为web前端初学者,今天要记录的是三个控件的使用心得,分别是表格控件jqgrid,树形控件ztree,图表控件echarts.下边分别进行描述. ...

  5. 2022年Web前端开发流程和学习路线(详尽版)

    前言 前端侧重于人机交互和用户体验,后端侧重于业务逻辑和大规模数据处理.理论上,面向用户的产品里,所有问题(包括产品.设计.后端.甚至看不见的问题)的表现形式,都会暴露在前端,而只有部分问题(数据问题 ...

  6. web前端零基础入门学习!前端真不难!

    现在互联网发展迅速,前端也成了很重要的岗位之一,许多人都往前端靠拢,可又无能为力,不知所措,首先我们说为什么在编程里,大家都倾向于往前端靠呢?原因很简单,那就是,在程序员的世界里,前端开发是最最简单的 ...

  7. 最适合2018年自学的web前端零基础系统学习视频+资料

    这份资料整理花了近7天,如果感觉有用,可以分享给更有需要的人. 在看接下的介绍前,我先说一下整理这份资料的初衷: 我的初衷是想帮助在这个行业发展的朋友和童鞋们,在论坛博客等地方少花些时间找资料,把有限 ...

  8. 史上最全的web前端开发程序员学习清单!

    今天为什么要给大家分享这篇文章呢,我发现最近来学前端的特别多,群里面整天都有人问:前端好找工作吗?前端要怎么学啊?前端工资怎么样?前端XX,前端XXX,虽然我回答过无数次这种问题了,但是问这个的还是有 ...

  9. WEB 前端模块化,读文笔记

    文章链接 WEB 前端模块化都有什么? 知识点 根据平台划分 浏览器 AMD.CMD 存在网络瓶颈,使用异步加载 非浏览器 CommonJS 直接操作 IO,同步加载 浏览器 AMD 依赖前置 req ...

  10. web前端——Vue.js基础学习

    近期项目的前端页面准备引入Vue.js,看了网上一些简介,及它和JQuery的对比,发现对于新入门的前端开发来说,Vue 其实也是比较适用的一个框架,其实用性不比JQuery差,感觉还挺有意思,于是研 ...

随机推荐

  1. java基础之二维数组不定义列数

    有一种特殊的二维数组,它的行数确定,但是每行的列数不确定.这样的的数组实现方法:先创建制定行数,列数缺省的二维数组,然后对数组的每一行重新初始化.举例如下: package day5; //第二种定义 ...

  2. vue表格之@row-click="handleSelect" 与setCurrentRow

    作用:表格行点击触发的事件 注意与@change.@selection-change事件的区分 <el-table ref="RoomTable" @row-click=&q ...

  3. 怎么解决VirtualBox无法安装增强工具

    点击「设备」-「安装增强功能」,然后就弹出下面这个东西,百度和 bing 了很久,终于解决啦~ Unable to insert the virtual optical disk D:\Program ...

  4. java笔试之计算n x m的棋盘格子

    请编写一个函数(允许增加子函数),计算n x m的棋盘格子(n为横向的格子数,m为竖向的格子数)沿着各自边缘线从左上角走到右下角,总共有多少种走法,要求不能走回头路,即:只能往右和往下走,不能往左和往 ...

  5. STL与泛型编程-第一周笔记-Geekband

    1, 模板观念与函数模板 简单模板: template< typename T > T Function( T a, T b) {- } 类模板: template struct Obje ...

  6. Groupadd- Linux必学的60个命令

    1.作用 groupadd命令用于将新组加入系统. 2.格式 groupadd [-g gid] [-o]] [-r] [-f] groupname 3.主要参数 -g gid:指定组ID号. -o: ...

  7. Python3读取深度学习CIFAR-10数据集出现的若干问题解决

    今天在看网上的视频学习深度学习的时候,用到了CIFAR-10数据集.当我兴高采烈的运行代码时,却发现了一些错误: # -*- coding: utf-8 -*- import pickle as p ...

  8. Java校验时间段重叠

    1.需求 要求保存每一条数据的startTime.endTime的中间时间段是唯一的,跟其他数据时间段不能存在冲突 比如: (2019-03-01 -> 2019-03-03 )  (2019- ...

  9. Yaf--个人封装yaf的框架+swoole+elasticsearch(Window+linux版)

    这是基于c写底层的yaf框架集成PDO+predis+读写分离+composer+全局异常处理+多模块开发+Log日志记录简单容易上手的框架 注意:window版没有swoole和Smarty主要用作 ...

  10. 洛谷P3298 泉

    时空限制 1000ms / 128MB 题目描述 作为光荣的济南泉历史研究小组中的一员,铭铭收集了历史上x个不同年份时不同泉区的水流指数,这个指数是一个小于. 2^30的非负整数.第i个年份时六个泉区 ...