元素节点

元素节点就是HTML标签元素,元素节点主要提供了对元素标签名、子节点及属性的访问;
元素节点的三个node属性:nodeType:1、nodeName/TagName:元素的标签名大写、nodeValue:null;
其父节点 parentNode 指向包含该元素节点的元素节点 Element 或文档节点 Document;
元素的 childNodes 属性中包含了它的所有子节点,这些子节点可能是元素、文本、注释、处理指令节点;
childNodes 结合 NodeType 可以检查有几个元素子节点:
<ul class="list" id="list">
<li class="in"></li>
<li class="in"></li>
</ul>
<script>
var oList = document.getElementById('list');
var children = oList.childNodes;
var num = 0;
for(var i = 0; i < children.length; i++){
if(children[i].nodeType == 1){
num++;
}
}
console.log(num);//2 有2个元素子节点
</script>
操作属性的方法主要有hasAttribute()、getAttribute()、setAttribute()、removeAttribute()四个,可以针对任何属性使用,包括那些以HTMLElement类型属性的形式定义的属性;
<div class="wrapper" id='test' for="nice" style="width:200px;height:100px;background:#f0f">123</div>
<script type="text/javascript">
var oTest = document.getElementById('test');
//IE6/IE7不支持hasAttribute方法
console.log(oTest.hasAttribute('class'));//true
console.log(oTest.hasAttribute('className'));//false
console.log(oTest.hasAttribute('id'));//true
console.log(oTest.hasAttribute('style'));//true
console.log(oTest.hasAttribute('for'));//true
console.log(oTest.hasAttribute('htmlFor'));//false
</script>
<script type="text/javascript">
var oTest = document.getElementById('test');
oTest.setAttribute('class','aaa'); //setAttribute直接用class就可以了
oTest.setAttribute('className','bbb');
console.log(oTest.class);//undefined IE8及以下会报错缺少标识符
console.log(oTest.getAttribute('class'));//aaa getAttribute直接用class就可以了
console.log(oTest.className);//aaa
console.log(oTest.getAttribute('className'));//bbb
oTest.setAttribute('style','border:1px solid red;height: 100px;'); //setAttribute直接用 style 就可以了
console.log(oTest.style);//所有的style设置,包括你没有设置的,太多了,肯定不是你想要的
console.log(oTest.getAttribute('style'));
//border:1px solid red;height: 100px; getAttribute直接用 style 就可以了
oTest.setAttribute('for','eee'); //setAttribute直接用for就可以了
oTest.setAttribute('htmlFor','fff')
console.log(oTest.for);//undefined IE8及以下会报错缺少标识符
console.log(oTest.htmlFor);//undefined
console.log(oTest.getAttribute('for'));//eee getAttribute直接用for就可以了
console.log(oTest.getAttribute('htmlFor'));//fff
console.log(oTest);
//<div class="aaa" id="test" for="eee" style="ddd" classname="bbb" htmlfor="fff">123</div>
</script>
<div class="wrapper" id='test' for="nice" style="background:#f0f;height: 100px;">123</div>
<script type="text/javascript">
var oTest = document.getElementById('test');
oTest.removeAttribute('class'); //removeAttribute直接用class就可以了
oTest.removeAttribute('for');
oTest.removeAttribute('style');
console.log(oTest);// <div id="test">123</div>
</script>
属性节点
属性节点,有的叫特性节点,差不多一个意思;
属性节点的三个node属性,nodeType:2、nodeName/name:属性名称、nodeValue/value:属性值;
属性节点还有一个 specified 属性,specified 是一个布尔值,用以区别特性是在代码中指定的,还是默认的。这个属性的值如果为true,则意味着在HTML中指定了相应特性,或者是通过 setAttribute() 方法设置了该属性。在IE中,所有未设置过的特性的该属性值都为false,而在其他浏览器中,所有设置过的特性的该属性值都是true,未设置过的特性,如果强行为其设置 specified 属性,则报错。
元素节点有一个 attributes 属性,它包含一个 NamedNodeMap,包含当前元素所有的属性及属性值,与NodeList类似,也是一个动态的集合。元素的每一个属性都由一个Attr节点表示,每个节点都保存在NamedNodeMap对象中,每个节点的 nodeName 就是属性的名称,节点的 nodeValue 就是属性的值;
createAttribute(attr) 创建新的属性节点;
attributes属性包含以下四个方法:
<div class="wrapper" id='test' for="nice" style="background:#f0f;height: 100px;">123</div>
<script type="text/javascript">
var oTest = document.getElementById('test');
console.log(oTest.attributes);// NamedNodeMap {0: class, 1: id, 2: for, 3: style, length: 4}
console.log(oTest.attributes.item(1).specified);//true
console.log(oTest.attributes.getNamedItem('id'));//id='test'
console.log(typeof oTest.attributes.getNamedItem('id'));//object
console.log(oTest.attributes.removeNamedItem('for'));//id='test'
console.log(oTest.attributes);// NamedNodeMap {0: class, 1: id, 2: style, length: 3}
var abc = document.createAttribute("abc");
abc.nodeValue = "1234567";
oTest.attributes.setNamedItem(abc);
//obj.attributes.setNamedItem(attr) 要先创建属性,在以nodeValue的形式赋属性值,在传入setNamedItem
console.log(oTest.attributes);// NamedNodeMap {0: class, 1: id, 2: style, 3: abc, length: 4}
console.log(oTest.attributes.item(1));//id='test'
console.log(oTest.attributes[1]);//id='test'
</script>
attributes属性主要用于属性遍历。在需要将DOM结构序列化为HTML字符串时,多数都会涉及遍历元素特性
<div class="wrapper" id='test' for="nice" style="background:#f0f;height: 100px;">123</div>
<script type="text/javascript">
function outputAttributes(obj){
var arr = [],
attrName,
attrValue,
i;
for(i = 0; i < obj.attributes.length; i++){
attrName = obj.attributes[i].nodeName;
attrValue = obj.attributes[i].nodeValue;
arr.push(attrName + '=\"' + attrValue + '\"');
}
return arr.join(" ");
}
var oTest = document.getElementById('test');
console.log(oTest.attributes);//NamedNodeMap {0: class, 1: id, 2: for, 3: style, length: 4}
console.log(typeof oTest.attributes);//object
console.log(outputAttributes(oTest));
//class="wrapper" id="test" for="nice" style="background:#f0f;height: 100px;"
console.log(typeof outputAttributes(oTest));//string
</script>
文本节点
文本节点的三个node属性,nodeType:3、nodeName:'#text'、nodeValue:节点所包含的文本,其父节点 parentNode 指向包含该文本节点的元素节点,文本节点没有子节点;
关于文本节点,遇到最多的兼容问题是空白文本节点问题。IE8及以下浏览器不识别空白文本节点,而其他浏览器会识别空白文本节点 ;所以有时候我们需要清理空白文本节点;
<div id="test">
<div>hello world!</div>
</div>
<script type="text/javascript">
var oTest = document.getElementById('test');
//第一个和最后一个都是空白文本节点
console.log(oTest.firstChild);//" "
console.log(oTest.lastChild);//" "
console.log(oTest.childNodes);//[text, div, text]
//标准浏览器输出[text, div, text],text表示空白文本节点
//IE8及以下浏览器输出[div],并不包含空白文本节点
console.log(oTest.childNodes.length); //3
//标准浏览器返回3
//IE8及以下浏览器返回1,并不包含空白文本节点
//清理空白文本节点
function cleanWhitespace(oEelement){
for(var i = 0; i < oEelement.childNodes.length; i++){
var node = oEelement.childNodes[i];
if(node.nodeType == 3 && !/\S/.test(node.nodeValue)){
node.parentNode.removeChild(node);
}
}
}
cleanWhitespace(oTest);
console.log(oTest.childNodes);//[div]
console.log(oTest.childNodes.length); //1
</script>
文本节点属性:
<div id="testData">hello world!</div>
<div id="testWholeText">hello world!</div>
<script type="text/javascript">
var oTestData = document.getElementById('testData');
//第一个和最后一个都是空白文本节点
console.log(oTestData.firstChild);//"hello world!"
console.log(typeof oTestData.firstChild);//object
console.log(oTestData.childNodes.length); //1
console.log(oTestData.firstChild.nodeValue);//"hello world!"
console.log(typeof oTestData.firstChild.nodeValue);//string
console.log(oTestData.firstChild.data);//"hello world!"
//文本节点的data属性与nodeValue属性相同,都是 string 类型
console.log(oTestData.firstChild.data === oTestData.firstChild.nodeValue);//true
var oTestWholeText = document.getElementById('testWholeText');
console.log(oTestWholeText.childNodes); //[text]
console.log(oTestWholeText.childNodes.length); //1
console.log(oTestWholeText.firstChild.wholeText);//hello world!
console.log(oTestWholeText.firstChild.data);//hello world!
oTestWholeText.firstChild.splitText('or');
console.log(oTestWholeText.childNodes); //[text, text]
console.log(oTestWholeText.childNodes.length); //2
console.log(oTestWholeText.firstChild);//#text
console.log(oTestWholeText.firstChild.wholeText);//hello world!
//wholeText属性将当前Text节点与毗邻的Text节点,作为一个整体返回。
console.log(oTestData.firstChild.length);//12
console.log(oTestData.firstChild.nodeValue.length);//12
console.log(oTestData.firstChild.data.length);//12
</script>
文本节点方法:
文本节点的操作与字符串的操作方法相当类似。一般地,我们获取文本都用 innerHTML,然后再去字符串的操作方法去操作。
以上所述是小编给大家介绍的jacascript DOM节点——元素节点、属性节点、文本节点,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
# javascript
# dom
# 文本节点
# JavaScript DOM节点操作方法总结
# js操作DOM--添加、删除节点的简单实例
# JavaScript中对DOM节点的访问、创建、修改、删除
# javascript获取dom的下一个节点方法
# javascript 获取HTML DOM父、子、临近节点
# js和jquery对dom节点的操作(创建/追加)
# js中使用DOM复制(克隆)指定节点名数据到新的XML文件中的代码
# javascript dom操作之cloneNode文本节点克隆使用技巧
# 就可以
# 返回值
# 都是
# 的是
# 报错
# 第一个
# 遍历
# 不存在
# 作为一个
# 不支持
# 要先
# 不要用
# 小编
# 其父
# 操作方法
# 是一个
# 彻底删除
# 是在
# 行间
# 最多
相关文章:
网站设计制作公司地址,网站建设比较好的公司都有哪些?
青岛网站设计制作公司,查询青岛招聘信息的网站有哪些?
东莞市网站制作公司有哪些,东莞找工作用什么网站好?
如何用免费手机建站系统零基础打造专业网站?
宝塔面板创建网站无法访问?如何快速排查修复?
手机网站制作与建设方案,手机网站如何建设?
如何安全更换建站之星模板并保留数据?
如何用y主机助手快速搭建网站?
C#如何使用XPathNavigator高效查询XML
香港服务器网站生成指南:免费资源整合与高速稳定配置方案
建站之星后台管理系统如何操作?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
如何高效配置香港服务器实现快速建站?
北京网站制作的公司有哪些,北京白云观官方网站?
太原网站制作公司有哪些,网约车营运证查询官网?
导航网站建站方案与优化指南:一站式高效搭建技巧解析
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
Python路径拼接规范_跨平台处理说明【指导】
武清网站制作公司,天津武清个人营业执照注销查询系统网站?
宁波自助建站系统如何快速打造专业企业网站?
SAX解析器是什么,它与DOM在处理大型XML文件时有何不同?
北京网站制作公司哪家好一点,北京租房网站有哪些?
如何在建站主机中优化服务器配置?
黑客如何通过漏洞一步步攻陷网站服务器?
如何在Tomcat中配置并部署网站项目?
非常酷的网站设计制作软件,酷培ai教育官方网站?
湖北网站制作公司有哪些,湖北清能集团官网?
javascript中对象的定义、使用以及对象和原型链操作小结
如何用手机制作网站和网页,手机移动端的网站能制作成中英双语的吗?
盘锦网站制作公司,盘锦大洼有多少5G网站?
如何在IIS中新建站点并配置端口与物理路径?
,在苏州找工作,上哪个网站比较好?
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
建站之星后台密码遗忘或太弱?如何重置与强化?
建站之星安装后如何自定义网站颜色与字体?
如何快速搭建高效简练网站?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
武汉外贸网站制作公司,现在武汉外贸前景怎么样啊?
PHP 500报错的快速解决方法
,石家庄四十八中学官网?
宠物网站制作html代码,有没有专门介绍宠物如何养的网站啊?
网站制作员失业,怎样查看自己网站的注册者?
如何用腾讯建站主机快速创建免费网站?
小自动建站系统:AI智能生成+拖拽模板,多端适配一键搭建
建站之星后台密码遗忘?如何快速找回?
新网站制作渠道有哪些,跪求一个无线渠道比较强的小说网站,我要发表小说?
如何通过智能用户系统一键生成高效建站方案?
最好的网站制作公司,网购哪个网站口碑最好,推荐几个?谢谢?
如何通过IIS搭建网站并配置访问权限?
如何在云主机上快速搭建多站点网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。