1、概述
2、使用元素对象
HTMLElement对象提供了一组属性,用来读取和修改被代表元素的数据
<body>
<p id="mytext" dir="ltr" lang="ch">
这里有一些文本,那里还有一些文本,这里都是一些文本
</p>
<pre id="results"></pre>
<script type="text/javascript">
var results=document.getElementById("results");
var mytext=document.getElementById("mytext");
results.innerHTML+="tag:"+mytext.tagName+"\n";
results.innerHTML+="id:"+mytext.id+"\n";
results.innerHTML+="dir:"+mytext.dir+"\n";
results.innerHTML+="lang:"+mytext.lang+"\n";
results.innerHTML+="hidden:"+mytext.hidden+"\n";
results.innerHTML+="disabled:"+mytext.disabled+"\n";
</script>
</body>
3、className使用className属性
<head>
<style type="text/css">
.myp{background-color: blueviolet;}
.mynewP{background-color: chartreuse;}
</style>
</head>
<body>
<p class="myp" id="mytext" dir="ltr" lang="ch">
这里有一些文本,那里还有一些文本,这里都是一些文本
</p>
<br/>
<button id="mybut">切换</button>
<pre id="results"></pre>
<script type="text/javascript">
var mybut=document.getElementById("mybut");
var mytext=document.getElementById("mytext");
mybut.onclick=function(){
mytext.className="mynewP";
}
</script>
</body
4、classList管理类列表
除了以上这些属性和方法,还可以使用数组风格的表示法,通过索引来获得类
如果移除一个类,则可以是用classlist
toggle有就天剑,没有就移除
<head>
<style type="text/css">
.myp{background-color: blueviolet;}
.mynewP{background-color: chartreuse;}
</style>
</head>
<body>
<p class="myp" id="mytext" dir="ltr" lang="ch">
这里有一些文本,那里还有一些文本,这里都是一些文本
</p>
<br/>
<button id="mybut">Toggle</button>
<pre id="results"></pre>
<script type="text/javascript">
var mybut=document.getElementById("mybut");
var results=document.getElementById("results");
mybut.onclick=mytoggleClass;
listClasses();
function listClasses(){
var classlist=document.getElementById("mytext").classList;
results.innerHTML="Current classes:";
for(var i=0; i<classlist.length;i++){
results.innerHTML+=classlist[i]+"";
}
}
function mytoggleClass(){
document.getElementById("mytext").classList.toggle("mynewP");
listClasses();
}
</script>
</body>
5、使用元素属性
hasAttribute,setAttribute,getAttribute()
<body>
<p class="myp" id="mytext" dir="ltr" lang="ch">
这里有一些文本,那里还有一些文本,这里都是一些文本
</p>
<br/>
<pre id="results"></pre>
<script type="text/javascript">
var mytext=document.getElementById("mytext");
var results=document.getElementById("results");
results.innerHTML="p has a lang attribute:"+mytext.hasAttribute("lang")+"\n";
results.innerHTML+="add lang atrribute:";
mytext.setAttribute("lang","en-us")+"\n";
results.innerHTML+="attribute is:"+mytext.getAttribute("lang")+"\n";
</script>
</body>
6、data开头的自定义属性
以data-customProperty的形式自定义属性,最后统一在dataset集合中读取这些自定义属性
<body>
<p class="myp" id="mytext" data-fruit="myfr" data-oran="myora">
这里有一些文本,那里还有一些文本,这里都是一些文本
</p>
<br/>
<pre id="results"></pre>
<script type="text/javascript">
var mytext=document.getElementById("mytext");
var results=document.getElementById("results");
for(var attr in mytext.dataset){
results.innerHTML+=attr+"\n";
}
results.innerHTML+=mytext.dataset["fruit"];
</script>
</body>
6、attributes使用所有属性
通过attributes属性获得一个包含某元素所有属性的集合,他会返回一个由attr对象构成的数组
<body>
<p class="myp" id="mytext" data-fruit="myfr" data-oran="myora">
这里有一些文本,那里还有一些文本,这里都是一些文本
</p>
<br/>
<pre id="results"></pre>
<script type="text/javascript">
var mytext=document.getElementById("mytext");
var results=document.getElementById("results");
var attri=mytext.attributes;
for(var i=0;i<attri.length;i++){
results.innerHTML+="Name:"+attri[i].name+",value:"+attri[i].value+"\n";
}
attri["data-fruit"].value="anoterFruit";
results.innerHTML+=attri["data-fruit"].value;
</script>
</body>
7、使用text对象
文本内容是text对象,如
这是text对象
,即标签对之内的内容时text对象,但p不是text对象<body>
<p class="myp" id="mytext" data-fruit="myfr" data-oran="myora">
这里有一些文本,那里还有一<b>这里都是一些文本</b>些文本单独发东方闪电
</p>
<br/>
<button id="mybut">press</button>
<pre id="results"></pre>
<script type="text/javascript">
var mytext=document.getElementById("mytext");
var results=document.getElementById("results");
var mybut=document.getElementById("mybut");
mybut.onclick=function(){
var btext=mytext.firstChild;
results.innerHTML="length:"+btext.length+"\n";
btext.replaceWith("this is a new string");
}
</script>
</body>
7、修改模型
8、appendChild,createElement,createTextNode,removeChild创建和删除元素
通过document对象创建新的元素,然后找到一个现存的htmlElement,并使用之前介绍的某种方法来插入他们
<body>
<table border=1 id="mytab">
<thead><th>Name</th><th>Color</th></thead>
<tbody>
<tr><td>张三</td><td>红色</td></tr>
<tr><td>李四</td><td>绿色</td></tr>
</tbody>
</table>
<br/>
<button id="mybut">add</button>
<button id="remove">remove</button>
<pre id="results"></pre>
<script type="text/javascript">
var mytab=document.getElementById("mytab");
var mybut=document.getElementById("mybut");
var remove=document.getElementById("remove");
mybut.onclick=function(){
var row=mytab.appendChild(document.createElement("tr"));
row.setAttribute("id","newrow");
row.appendChild(document.createElement("td"))
.appendChild(document.createTextNode("王二"));
row.appendChild(document.createElement("td"))
.appendChild(document.createTextNode("粉色"));
}
remove.onclick=function(){
var row=document.getElementById("newrow");
//mytab.removeChild(row)
row.parentNode.removeChild(row);
}
</script>
</body>
9、cloneNode元素
cloneNode(true)指定是否复制其子元素
<body>
<table border=1 id="mytab">
<thead><th>Name</th><th>Color</th></thead>
<tbody>
<tr><td>张三</td><td>红色</td></tr>
<tr><td>李四</td><td>绿色</td></tr>
</tbody>
</table>
<br/>
<button id="mybut">duplicate</button>
<pre id="results"></pre>
<script type="text/javascript">
var mytab=document.getElementById("mytab");
var mybut=document.getElementById("mybut");
mybut.onclick=function(){
var newrow=mytab.childNodes[3].cloneNode(true);
console.log(newrow);
mytab.appendChild(newrow);
}
</script>
</body>
10、移动元素(原有元素不见了)
<body>
<table border=1 id="mytab">
<thead><th>Name</th><th>Color</th></thead>
<tbody>
<tr><td>张三</td><td>红色</td></tr>
<tr id="lisi"><td>李四</td><td>绿色</td></tr>
</tbody>
</table>
<br/>
<table border=1>
<thead><th>Name</th><th>Color</th></thead>
<tbody id="anothertab">
<tr><td>王二</td><td>红色</td></tr>
</tbody>
</table>
<br/>
<button id="mybut">move</button>
<pre id="results"></pre>
<script type="text/javascript">
var mytab=document.getElementById("mytab");
var mybut=document.getElementById("mybut");
mybut.onclick=function(){
var row=document.getElementById("lisi");
document.getElementById("anothertab").appendChild(row);
}
</script>
</body>
11、isSameNode,isEqualNode比较元素对象
isSameNode:简单地检查他们是否代表了同一个元素。
isEqualNode:如果元素具有相同的类型,相同的属性值,其子元素也相同并且顺序一致,那么他们就是相同的。
<body>
<table border=1 id="mytab">
<thead><th>Name</th><th>Color</th></thead>
<tbody id="mytbody">
<tr id="zhangsan"><td>张三</td><td>红色</td></tr>
<tr id="lisi"><td>李四</td><td>绿色</td></tr>
</tbody>
</table>
<br/>
<br/>
<button id="mybut">issame</button>
<pre id="results"></pre>
<script type="text/javascript">
var results=document.getElementById("results");
var mybut=document.getElementById("mybut");
var mytbody=document.getElementById("mytbody");
var myzhangsan=document.getElementById("zhangsan");
var myrow=mytbody.getElementsByTagName("tr")[0];
if(myzhangsan.isSameNode(myrow)){
results.innerHTML="the two element is same";
}
</script>
</body>
isEqualNode
<table border=1 id="mytab">
<thead><th>Name</th><th>Color</th></thead>
<tbody id="mytbody">
<tr class="zhangsan"><td>张三风</td><td>红色</td></tr>
<tr id="lisi"><td>李四</td><td>绿色</td></tr>
</tbody>
</table>
<br/>
<button id="mybut">issame</button>
<pre id="results"></pre>
<script type="text/javascript">
var elems=document.getElementsByClassName("zhangsan");
if(elems[0].isEqualNode(elems[1])){
results.innerHTML="the two element is equal";
} else{
results.innerHTML="the two element is NOT equal";
}
</script>
</body>
12、innerHtml,outerHTML,insertAdjacentHTML使用html片段
innerhtml:标签内部的内容
outerhtml:连带标签及内容一起显示出来
<body>
<table border=1 id="mytab">
<thead><th>Name</th><th>Color</th></thead>
<tbody id="mytbody">
<tr class="zhangsan"><td>张三</td><td>红色</td></tr>
<tr id="lisi"><td>李四</td><td>绿色</td></tr>
<tr class="zhangsan"><td>张三</td><td>红色</td></tr>
</tbody>
</table>
<br/>
<br/>
<button id="inner">innerHTML</button>
<button id="outer">outerHTML</button>
<textarea rows="3" id="results"></textarea>
<script type="text/javascript">
var results=document.getElementById("results");
var row=document.getElementById("lisi");
var inner=document.getElementById("inner");
var outer=document.getElementById("outer");
inner.onclick=function(){
results.innerHTML=row.innerHTML;
}
outer.onclick=function(){
results.innerHTML=row.outerHTML;
}
</script>
</body>
13、insertAdjacentHTML插入HTML片段(代码片段)
insertAdjacentHTML方法有两个参数,一个参数是插入的位置,一个参数是插入的代码片段
<body>
<table border=1 id="mytab">
<thead><th>Name</th><th>Color</th></thead>
<tbody id="mytbody">
<tr id="targetrow"><td>Placeholder</td></tr>
</tbody>
</table>
<br/>
<br/>
<button id="ab">After Begin</button>
<button id="ae">After End</button>
<button id="bb">Before Bengin</button>
<button id="be">Before End</button>
<script type="text/javascript">
var target=document.getElementById("targetrow");
var buttons=document.getElementsByTagName("button");
for(var i=0;i<buttons.length;i++){
buttons[i].onclick=handleButPress;
}
function handleButPress (e){
if(e.target.id=="ab"){
target.insertAdjacentHTML("afterbegin","<td>this is after begein<td/>");
}else if(e.target.id=="ae"){
target.insertAdjacentHTML("beforeend","<td>this is before end<td/>");
}else if(e.target.id=="bb"){
target.insertAdjacentHTML("beforebegin","<tr><td colspan='2'>this is before end<td/></tr>");
}else{
target.insertAdjacentHTML("afterend","<tr><td colspan='2'>this is After End<td/></tr>");
}
}
</script>
</body>
13、向文本块插入元素
<body>
<p id="text">
there is some things to do something, By the time add,countleess zhen
</p>
<br/>
<br/>
<button id="insert">Insert Element</button>
<script type="text/javascript">
var buttons=document.getElementById("insert");
buttons.onclick=function(){
var text=document.getElementById("text");
text.firstChild.splitText(10);
var newText=text.childNodes[1].splitText(9).previousSibling;
//创建了一个b元素,将截取的一部分放入到文本中
text.insertBefore(document.createElement("b"),newText).appendChild(newText);
}
</script>
</body>