(第二天)HTML5新增元素、属性(下)及Range对象(上)

HTML5新增元素(下)


  • output:输出元素,与label同样有for属性,常作为实时(或JS)输出的载体。
<!--output demo-->
<!--oninput属性:输入即触发-->
<form oninput="x.value = parseInt(a.value)+parseInt(b.value)">
    <input type="range" name="a" value="50"> +
    <input type="number" id="b" value="50"> =
    <output name="x" for="a b"></output>
</form>
  • figure与figcaption

    • figure:独立内容,移除对网页无影响;通常用来表示图片统计图,代码示例,表格统计,音视频插件等;
    • figcaption:在figure元素之内,作为标题元素使用;一个figure内建议只使用一个figcaption,并放在figure元素的第一个或最后一个位置。


<figure>
<figcaption>这是一群美女</figcaption>
<img src="1.jpg" alt="" width="50">
<img src="2.jpg" alt="" width="50">
<img src="3.jpg" alt="" width="50">
</figure>

* ***details与summary***:
  * *details*:有一个open属性,true/false;可通过鼠标点击改变其open状态;默认为闭合状态,可添加open属性改变默认值,也可通过js改变open属性的值实现;
  * *summary*:作为标题元素使用;若不存在该元素,浏览器会默认为details元素添加一个标题(使用"详细信息",但不添加summary元素);summary元素只可以有一个,若存在多个,只有第一个summary能实现其标题功能,其他与普通元素一样;可以放在details元素内任何位置,但建议放在第一个,更易代码阅读。

  ```html
<!--details & summary demo-->
<head>
    <meta charset="UTF-8">
    <title>Details与Summary的示例</title>
    <script>
    function check() {
        var details = document.getElementById("details");
        details.open = true; /*可通过这种形式打开,也可通过在details元素中直接添加open属性打开*/
        // alert(details.open);
    }
    </script>
</head>
<body onload="check()">
<!--此处添加了open属性,即details元素默认为打开状态; 否则默认为闭合状态-->
    <details id="details" open>
        <!-- 若不存在summary,则浏览器会使用默认字符,如"详细信息" -->
        <summary>文章列表</summary>
        <p>第一篇文章</p>
        <p>第一篇文章</p>
        <p>第一篇文章</p>
        <p>第一篇文章</p>
    </details>
</body>
  • mark:通过该元素可以高亮显示元素中的内容。
    <p><mark>mark</mark>是高亮的</p>
  • progress:进度条;两个属性:value当前进度值,max最大值。
<!--progress 从0到100实时变化 demo-->
<body>
    <script>
    // 传入rate值,实时更新progress的执行方法
    function btn() {
        var i = 0;
        var supdate = setInterval(update, 100); /*不停的根据指定周期执行指定函数,并返回一个对象*/

        function update() {
            if (i < 100) {
                i++;
                updateProgress(i);
            } else {
                clearInterval(supdate); /*根据setInterval返回的对象进行人为终止*/
                console.log(i);
            }
        }

    }

    // 更新进度条方法
    function updateProgress(rate) {
        var progressBar = document.getElementById("p");
        // 进度条的value = span标题的内容 = 传入的rate值
        progressBar.value = document.getElementsByTagName("span")[0].textContent = rate;
    }
    </script>
    <section>
        <h2></h2>
        <p>完成的百分比
            <progress id="p" max="100" value="0"></progress><span>0</span>%
        </p>
        <input type="button" onclick="btn()" value="点击">
    </section>
</body>
  • meter:指定范围的度量器,作为计量器,尺度使用。共六个属性如下:

    • value:当前度量值;
    • min:最小值;
    • max:最大值;
    • low:下限值;
    • high:上限值;
    • optimum:最佳值;

    <small>注:high < value < low时,meter显示为黄色;low <= value <= high显示绿色。

  • cite:引用,通常用作表示作品,如小说作品,电影作品等;以斜体形式显示。
    <cite>速度与激情</cite>

  • small:小型文本,通常作为旁注;如免责声明,注意事项,法律限制,版权声明等。

<!--small demo-->
<footer>
    <small>版权声明:</small>
</footer>
<!--small demo2-->
<dl>
    <dt>单人间</dt>
    <dd>399 元 <small>含早餐,不含税</small></dd>
    <dt>双人间</dt>
    <dd>599 元 <small>含早餐,不含税</small></dd>
</dl>

HTML5新增属性(下)


  • start,type,reversed:三个ol元素的属性,其中start,type为HTML4.01不赞成而HTML5支持的属性,reversed为HTML5新增的属性。

    • start:设置起始(列表第一个)索引值;
    • type:设置索引值类型,有如下5种类型:1,A,a,I,i;
    • reversed:设置是否反转;若添加该属性,则索引值(和内容无关)会反转。
      <!-- start表示li起始索引值,reversed表示反转 -->
      <!--此示例显示的序列为E,D,C,B,A start定义了第一个索引值为E,reversed定义了逆向,即按E,D顺序-->
      <ol start="5" reversed type="A">
          <li>第1个列表</li>
          <li>第2个列表</li>
          <li>第3个列表</li>
          <li>第4个列表</li>
          <li>第5个列表</li>
      </ol>
    
* ***control***:label对象(非元素,可通过JS获取label元素返回label对象,也可通过JS创建label对象)的属性;通过该对象属性,可以访问label标签下的第一个表单元素,如表单元素中存在for属性绑定,则优先访问绑定的第一个表单元素。
> <small>表单元素(共7个):input、select、textarea、button、datalist、keygen、output (最后3个为HTML5新增的表单元素)。

  ```html
<!--label对象control属性 demo-->
<body>
    <script>
    // 设置邮编默认值
    function setValue() {
        // 创建label对象,这里只用来说明创建方法
        // var label = document.createElement("LABEL");
        // 获得label对象
        var label = document.getElementById("label");
        // 访问label对象绑定的第一个表单元素,如无绑定,则访问第一个表单元素
        var inputValue = label.control;
        inputValue.value = "1000001"; /*这里的值可以突破maxlength属性的限制*/
    }
    </script>
    <form>
        <label for="txt" id="label">
            邮编:
            <input maxlength="6" id="txst">
            <!-- control属性访问的是这个input元素 -->
            <input maxlength="6" id="txt">
            <small>请输入6位数字</small>
        </label>
        <input type="button" value="设置默认值" onclick="setValue()">
    </form>
</body>
  • placeholder:文本框元素属性;文本框未输入状态时显示的提示用语(常见的文本框中的灰色提示文字)。输入字符后自动消失。
    <input type="text" placeholder="请输入姓名">

<small>文本框元素:input、textarea。

  • list:文本框元素属性;引用数据列表(▽提示下拉),其中包含输入字段的预定义选项,也允许用户输入;属性值为某个datalist表单元素的id;输入字符时,若字符存在datalist中,会自动提示。

    • datalist:定义选项列表。请使用 input 元素的 list 属性来绑定 datalist。datalist 及其选项不会被显示出来,它仅仅是合法的输入值列表。
      <input type="text" list="listgroup">
      <!-- list属性值为datalist元素的id值 -->
      <datalist id="listgroup">
          <!-- 输入value相关字符,会自动提示; 输入的是value值,后面的文字只是解释说明作用-->
          <option value="ios">IOS学习</option>
          <option value="hack">入侵学习</option>
          <option value="golang">GO学习</option>
      </datalist>
    
* ***autocomplete***:form、input元素属性;规定输入字段是否应该启用自动完成功能,on/off,默认值一般为on,默认值由浏览器预定义。自动完成允许浏览器预测对字段的输入。当用户在字段开始键入时,浏览器基于之前键入过的值,应该显示出在字段中填写的选项。
> <small>autocomplete 属性适用于 <form>,以及下面的 <input> 类型:text, search, url, telephone, email, password, datepickers, range 以及 color。

  ```html
    <form action="http://www.w3school.com.cn/example/html5/demo_form.asp" method="get" autocomplete="on">
        First name:
        <input type="text" name="fname" />
        <br /> Last name:
        <input type="text" name="lname" />
        <br /> E-mail:
        <!--email涉及到个人隐私,未保证隐私不泄露,这里将autocomplete设置为off;即浏览器下次无法提示曾用email-->
        <input type="email" name="email" autocomplete="off" />
        <br />
        <input type="submit" />
    </form>
  • pattern:input属性,规定用于验证输入字段的正则表达式。

<small>pattern 属性适用于以下 <input> 类型:text, search, url, telephone, email 以及 password。

<!--pattern demo-->
<form>
  <label>
      姓名:
      <!-- pattern规定此输入框必须输入A-Z之间的三个字符 -->
      <input type="text" pattern="[A-Z]{3}">
  </label>
  <input type="text" list="datalist" pattern="[A-Z]{3}">
  <datalist id="datalist">
      <option value="IOS">IOS学习</option>
      <!-- 此项value值不符合pattern规则,所以在下拉列表中不会显示 -->
      <option value="ANDROID">android学习</option>
      <option value="WEB">web学习</option>
  </datalist>
  <input type="submit" value="提交">
</form>
  • selectionDirectioninput&textarea属性,用于获取用户选择方向的行为,须通过JS方法获取。

    • forward:返回值,表示用户从左往右选择,或是有字符未选择的默认值;
    • backward:返回值,表示用户从右往左选择;
    • none:表示文本框中未输入任何字符

    <small>若从右往左选择后,进行了删除、替换、点击等行为,均返回forward。


<body>
<script>
function AD() {
// var txt = document.getElementById("txt");
// 上方方法与下方方法结果相同,只是不同获取input节点的方法。
var txt = document.forms[0]['txtName'];
var userAction = txt.selectionDirection;
alert(userAction);
}
</script>
<form>
<input type="text" id="txt" name="txtName">
<input type="button" value="获取用户选择文字方向" onclick="AD()">
</form>
</body>

* ***indeterminate***:input元素***checkbox***类型的属性,表示非明确状态,即选取与非选取之间。必须通过JS修改,默认值为false;该状态的下一个状态为选中。
```html
<input type="checkbox" id="cb">
<script>
var cb = document.getElementById("cb");
cb.indeterminate = true;
</script>
  • height,width:input元素image类型的新属性,定义图片按钮的高度和宽度。
    <input type="image" src="submit.gif" width="20" height="20">

HTML5之Range[范围]对象-(上)


Range对象为页面上一段连续区域,可通过Range对象获取或修改网页上的任何区域。

Selection对象与Range对象的使用

  1. 通过var selection = document.getSelection()获取被选中的信息,包括选中区域数,区域内容等;
  2. 通过selection.rangeCount属性获取被选中的区域数;
  3. 若rangeCount大于0,说明存在选中区域;则可通过selection.getRangeAt(i)获取对应i索引值的区域内容。

<small>1. 索引值i:根据内容的先后顺序依次索引,并非根据选择先后顺序索引;</small>
<small>2. 根据浏览器的不同,可选择区域也会不同;如chrome只能选择一个区域,firefox则可选择多个区域。</small>

<!--Selection & Range Demo-->
<body>
    <script>
    function showRanges(argument) {
        var html;
        var rangesContainer = document.getElementById("rangesContainer");
        var selection = document.getSelection();
        if (selection.rangeCount > 0) {
            html = "您选取了" + selection.rangeCount + "个区域<br/>";
            for (var i = 0; i < selection.rangeCount; i++) {
                /*返回指定索引值的range对象*/
                var rangeContent = selection.getRangeAt(i);
                console.log(rangeContent + "--" + rangeContent.toString());
                /*直接打印range对象和range.toString()效果相同*/
                html += "第" + (i + 1) + "段内容为:" + rangeContent + "<br/>";
            }
            rangesContainer.innerHTML = html;
        }
    }
    </script>
    <h3>Selection对象与Range对象示例</h3>
    <input type="button" value="点击显示选择区域的数量与内容" onclick="showRanges()">
    <div id="rangesContainer"></div>
</body>

Range对象的方法

<small>关于节点、子节点:<p>this is a <b>text</b></p>,其中p对象为一个节点,this is a是p节点的第一个子节点(是一个text对象);节点即元素(标签)对象;获取子节点的方法:节点.firstChild即可获取第一个子节点。更多节点可通过节点.childNodes[i]访问。</small>

  • Range的选择与删除
    • selectNode(refNode):选取整个元素(包含节点本身),参数refNode:被选中的节点,如<p>text</p>
    • selectNodeContents(refNode):选取元素中的内容(所有子节点,不包含节点本身),如<p>text<b>demo</b>text</p>中的text<b>demo</b>text
    • deleteContents():删除选取的Node或Contents,根据使用上述两个不同的选取方法决定;


<body>
<script>
function deleteContents(mode) {
// 创建一个Range对象
var rangeObj = document.createRange();
var demoArea = document.getElementById("demo");
if (mode) { /如果为true,表示删除整个元素/
// 选取整个Node
rangeObj.selectNode(demoArea);
rangeObj.deleteContents();
} else { /如果为false,表示仅删除元素中的内容/
// 选择Node中的Contents
rangeObj.selectNodeContents(demoArea);
rangeObj.deleteContents();
}
}
</script>
<div id="demo" style="background-color: #f00; width: 300px; height: 300px;">这是一个Range方法DEMO</div>
<button onclick="deleteContents(true)">删除整个元素</button>
<button onclick="deleteContents(false)">仅删除元素中的内容</button>
</body>


* ######Range范围起始的设置
  * ***setStart***(*refNode*,*offset*):设置Range的开始位置,`refNode:包含新的开始点的节点;offset:新开始点在refNode中的位置`;
  * ***setEnd***(*refNode*,*offset*):设置Range的结束位置,`refNode:包含新的开始点的节点;offset:新开始点在refNode中的位置`;
> <small> setEnd设置的位置如果超出refNode的长度,则会设置失败。

  ```html
<!--setStart & setEnd Demo-->
<body>
    <script>
        function deleteChar(argument) {
            var div = document.getElementById("rangeDemo");
            // 获取div对象的第一个子节点,即"13123123asdasdasd这是";无法使用div这个节点,这个节点没有length、也没有data属性,Range无法选取范围。
            //var child = div.firstChild;
            
            //通过另一种方法获取第一个子节点,第一个子节点是文本对象,有length和data
            //第二个子节点为<b>...</b>,这个下面还有一个子节点,也是文本对象。
            //<b>...</b>节点的长度为1,如要操作该节点的子节点,则如下:
            //var child = div.childNodes[1].firstChild;
            var child = div.childNodes[0];
            printObj(child);
            var rangeObj = document.createRange();
            var begin = document.getElementById("begin").valueAsNumber;
            var end = document.getElementById("end").valueAsNumber;
            rangeObj.setStart(child, begin); /*设置range在节点中的起始位置*/
            //end若超出child的长度,则会再控制台报错,设置失败
            rangeObj.setEnd(child, end); /*设置range在节点中的结束位置(含)*/
            rangeObj.deleteContents();
        }

        function printObj(obj) {
            var str = "";
            var printPlace = document.getElementById("printObj");
            //obj是一个键值对
            for(var key in obj) {
                str += key + ":" + obj[key] + "<br/>";
            }
            printPlace.innerHTML = str;
        }
    </script>
    <div id="rangeDemo" style="background-color: #00f; width: 300px;height: 300px;">13123123asdasdasd这是<b>一个很多子节点的,</b>用来被删除的内容</div>
    <label>起始位置:
    <input type="number" id="begin" value="0">
</label>
    <label>结束位置:
    <input type="number" id="end" value="3">
</label>
    <button onclick="deleteChar()">删除指定位置内容</button>
    <div id="printObj"></div>
</body>
  • setStartBefore(refNode):设置Range的开始位置位于refNode节点之前;
  • setEndAfter(refNode):设置Range的结束位置位于refNode节点之后;
  • setStartAfter(refNode):设置Range的开始位置位于refNode节点之后;
  • setEndBefore(refNode):设置Range的结束位置位于refNode节点之前;
<!--setStartBefore & setEndAfter  Demo-->
<body>
  <script>
  // 逐行删除,从第一行开始
  function deleteRow() {
      var table = document.getElementById("myTable");
      /*判断表单行数是否大于0,若等于0,则不能进行删除操作*/
      if (table.rows.length > 0) {
          // 创建Range对象
          var rangeObj = document.createRange();
          var row = table.rows[0]; /*获取table的第一行*/
          // 设置Range的开始范围为row节点之前
          rangeObj.setStartBefore(row);
          // 设置Range的结束范围为row节点之后
          rangeObj.setEndAfter(row);
          // 删除节点,row节点之前和row节点之后,Range的范围就是整个row节点,即删除第一行。
          rangeObj.deleteContents();
      }
  }
  </script>
  <table id="myTable" border="1" cellpadding="0" cellspacing="0">
      <tr>
          <td>内容1</td>
          <td>内容2</td>
      </tr>
      <tr>
          <td>内容3</td>
          <td>内容4</td>
      </tr>
      <tr>
          <td>内容5</td>
          <td>内容6</td>
      </tr>
  </table>
  <button onclick="deleteRow()">删除第一行内容</button>
</body>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 224,983评论 6 522
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 96,354评论 3 403
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 172,216评论 0 367
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 61,061评论 1 300
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 70,073评论 6 400
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 53,541评论 1 314
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 41,906评论 3 428
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 40,881评论 0 279
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 47,428评论 1 324
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 39,460评论 3 346
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 41,578评论 1 355
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 37,176评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,913评论 3 339
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 33,348评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 34,490评论 1 277
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 50,142评论 3 381
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 46,650评论 2 366

推荐阅读更多精彩内容