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差,感觉还挺有意思,于是研 ...
随机推荐
- PAT甲级——A1103 Integer Factorization
The K−P factorization of a positive integer N is to write N as the sum of the P-th power of Kpositiv ...
- vue报错 error: data.push is not a function
data定义出错,data需定义为一个数组 => data : [ ]
- storm一些可调节的参数
# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreeme ...
- C开发系列-指针
指针 通过一段简单的程序,引入指针的概念 #include <iostream> using namespace std; // changeValue函数的定义 void changeV ...
- 关于ubuntu中ifconfig得到的ip地址为127.0.0.1
我们的解决办法是 重新添加一个网络适配
- 大数据处理也要安全--关于MaxCompute的安全科普
[TOC] 1.企业大数据处理现状 当今社会数据收集手段不断丰富,行业数据大量积累,数据规模已增长到了传统软件行业无法承载的海量数据(百GB.TB乃至PB)级别.基于此,阿里云推出有了一套快速.完全托 ...
- LOJ#3119 随机立方体
解:极大值至少为1.我们尝试把最大那个数的影响去掉. 最大那个数所在的一层(指一个三维十字架)都是不可能成为最大值的. 考虑容斥.我们试图求除了最大值以外至少有k个极大值的概率. 我们钦定某k个位置是 ...
- (一)SpringBoot入门【基于2.x版本】
SpringBoot入门[基于2.x版本] 一.SpringBoot简介 首先大家学习SpringBoot的话,我希望大家是有一定java基础的,如果是有Spring的基础的话,上手会更加得心应手,因 ...
- [转载] DSP6000图像位移与变形典型算法
原文地址:转载:DSP6000图像位移与变形典型算法作者:Jane 李现路:DSP6000图像位移与变形典型算法 一.图像的平移算法 图像平移的数学表达式原理: 初始坐标为(x0,y0)的点经过平移( ...
- Django-rest Framework(五)
把十大接口做完了才能更好的了解后面的视图类 1.(重点)二次封装Response;自定义APIResponse继承Response,重写 ____init____方法 from rest_framew ...