js基础总结——js 获取元素节点、js 绑定onclick事件、js 获取属性 修改属性值、js 获取子元素、js 改变css样式

参考书籍:《JavaScript DOM编程艺术 第2版》
本博客代码的测试页面是:https://www.layui.com/

js dom操作

js 获取元素节点

  1. 一份document就是一棵节点树
// 1. 根据元素id名称获取dom, return→对象
document.getElementById('submit_btn')
// 2. 根据元素标签名称获取dom, return→对象数组
document.getElementsByTagName ('ul')
// 3. 根据元素class名称获取dom, return→对象数组
document.getElementsByClassName('menu active’')

js 绑定onclick事件

  1. 一个浏览器窗口可以加载某个HTML文档,相对应的,window对象有个属性就是document。当HTML文档全部加载完成时,会触发window对象的onload事件,此时,document对象已经存在了。
  2. 用js给某个元素绑定onclick事件,需要确定整个dom都已经加载完成。所以,在用
    <script></script>标签引用的js文件里,需要在onload事件内,给dom绑定onclick事件。
// onload
window.onload = function(){
	// 获取body元素
	var bodyDom = window.document.getElementsByTagName('body')[0];
	var headerDom = bodyDom.getElementsByClassName('layui-header header header-index')[0];
	// 绑定onclick事件
	headerDom.onclick=function(){
		alert('23232')
	}	
};

js 获取属性 修改属性值

// 获取元素
var aDom = document.getElementsByTagName('body')[0].getElementsByClassName('logo')[0];
// 设置元素属性值:src、href、title、disabled等
// 方法1,有限制
aDom.href= 'ww.baidu.com';
// 方法2,可修改任何属性
aDom.setAttribute('href','aaaaa');

// 获取元素属性值
// 方法1
var aDomHref = aDom.href;
// 方法2
aDom.getAttribute('href');

js 动态更新html

如果需要把一大段html内容插入到某个元素中,可以用innerHTML

.building-check-div {
	display: inline-block;
    width: 145px;
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
}
var bodyDom = window.document.getElementsByTagName('body')[0];
var headerDom = bodyDom.getElementsByClassName('layui-header header header-index')[0];
var arr = [{id:1,nodeName1:'开盘'},{id:2,nodeName1:'桩基开工'},{id:3,nodeName1:'项目入伙'},{id:4,nodeName1:'竣工验收备案'},{id:5,nodeName1:'工程达到预售条件'}];
var inputHtml = '';
var disabledHtml = '';
for (var i = 0; i < arr.length; i++) {
    // ' <input type="checkbox" class="checkedit" value="' + data + '" οnchange="thischeck(this)">'
     inputHtml += '<div class="building-check-div">';
     inputHtml += '<input type="checkbox" name="buildings" value="'+
         arr[i].id+'" data-id="'+arr[i].id+'" οnchange="" data-name="'+ arr[i].nodeName1 +'" '+disabledHtml+'/>' + arr[i].nodeName1;
     inputHtml += '</div>';
     if((i+1)%4 == 0 && i != 0){
         inputHtml += '<br>';
     }
}
headerDom.innerHTML = inputHtml;

js 创建节点

DOM是文档的表示,在DOM看来,一个文档就是一棵节点树。如果想在节点树上添加标记,就必须插入新的元素节点。

// 1.创建一个新的元素
var pDom = document.createElement('p');
// 2.添加文本
// 方法1-添加文本节点
var textDom = document.createTextNode('下雨了-我是<p></p>元素我在滚动条最下面');
pDom.appendChild(textDom);
// 方法2-修改节点内html的内容
//pDom.innerHTML = '下雨了';

// 3.把这个新元素插入节点树
var bodyDom = window.document.getElementsByTagName('body')[0];
bodyDom.appendChild(pDom); // appendChild 会将新元素添加到最后

js 在已有元素前插入新元素

var bodyDom = window.document.getElementsByTagName('body')[0];
var pDom = document.createElement('p');
var textDom = document.createTextNode('下雨了-我是<p></p>元素我在header前面');
pDom.appendChild(textDom);
bodyDom.insertBefore(pDom,bodyDom.getElementsByClassName('layui-header header header-index')[0]);

js 在已有元素后面插入新元素

/**
 * 在已有元素后面插入新元素
 * @param newDom 新元素
 * @param targetDom 目标元素
 */
function insertAfter(newDom, targetDom){
	var parent = targetDom.parentNode;
	if(parent.lastChild == targetDom){
		parent.appendChild(newDom);
	}else{
		parent.insertBefore(newDom,targetDom.nextSibling);
	}
}

js 获取子元素

// 获取body元素的全部子元素, return→对象数组
document.getElementsByTagName('body')[0].childNodes

// 获取body元素的第一个子元素
// 方法1
document.getElementsByTagName('body')[0].childNodes[0]
// 方法2
document.getElementsByTagName('body')[0].firstChild

// 获取body元素的最后一个子元素
var bodyDom = document.getElementsByTagName('body')[0];
var bodyChildArr = bodyDom.childNodes;
// 方法1
bodyChildArr[bodyChildArr.length - 1]
// 方法2
bodyDom.lastChild

js 阻止a标签默认跳转

在给某个元素添加了事件处理函数后,一旦事件发生,相应的JavaScript代码就会得到执行。被调用的JavaScript代码可以返回一个值,这个值将传递给对应的事件处理函数。

当给<a></a>标签添加onclick事件时,让这个处理函数所触发的代码返回false,那么,onclick事件处理函数就认为“这个链接没有被点击”,就可以阻止<a></a>标签的默认跳转行为

js 节点类型 nodeType

节点类型nodeType共有12中可取值,其中:1-元素节点 2-属性节点 3-文本节点

// 获取body元素的第一个节点的类型, return→int
document.getElementsByTagName('body')[0].childNodes[0].nodeType

js 改变css样式

className属性

可以用追加className的方式,修改元素的class属性

var bodyDom = window.document.getElementsByTagName('body')[0];
var headerDom = bodyDom.getElementsByClassName('layui-header header header-index')[0];
// 注意,第一个字符是空格
headerDom.className += headerDom.className.indexOf('danger-red') > -1 ? '':' danger-red'
console.log(headerDom.className);

style属性

element.style的方式,可以改变这个元素的样式。但是,style对象只能返回内联样式,只包含在html代码里用style属性声明的样式,对于在css里定义的样式是获取不到的。

var bodyDom = window.document.getElementsByTagName('body')[0];
var headerDom = bodyDom.getElementsByClassName('layui-header header header-index')[0];
headerDom.style.background = 'red';
// 中间有-的样式属性名,对应为驼峰法名称
headerDom.style.fontSize = '40px';
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
获取目标节点的信息和绑定事件的信息,可以使用DOM操作和JavaScript事件监听器。 1. 使用DOM操作获取目标节点的信息: - 通过getElementById()方法获取id为目标节点元素,如:var targetNode = document.getElementById("target"); - 通过getElementsByTagName()方法获取标签名为目标节点元素,如:var targetNodeList = document.getElementsByTagName("div"); - 通过querySelector()方法获取匹配CSS选择器的第一个目标节点,如:var targetNode = document.querySelector(".target"); - 通过querySelectorAll()方法获取匹配CSS选择器的所有目标节点,如:var targetNodeList = document.querySelectorAll(".target"); 获取目标节点的信息包括节点属性样式、内容等,可以使用相关属性和方法,如: - 获取节点属性:targetNode.getAttribute("属性名"); - 设置节点属性:targetNode.setAttribute("属性名", "属性"); - 获取节点样式:targetNode.style.样式属性; - 获取节点的内容:targetNode.innerHTML或targetNode.textContent; 2. 使用JavaScript事件监听器获取绑定事件的信息: - 首先,需要给目标节点绑定事件监听器,如:targetNode.addEventListener("click", function(){}); - 然后,可以获取目标节点绑定事件信息,如:targetNode.onclick、targetNode.addEventListener("click", function(){}); 获取目标节点绑定事件信息包括事件类型、事件处理函数等,可以通过相关属性和方法获取,如: - 获取事件类型:targetNode.onclick.type、targetNode.addEventListener("click", function(){}).type; - 获取事件处理函数:targetNode.onclick、targetNode.addEventListener("click", function(){}); 需要注意的是,如果目标节点绑定了多个事件监听器,可以使用addEventListener()方法添加多个事件监听器,但只能使用removeEventListener()方法移除指定的事件监听器。要移除所有事件监听器,需要重新创建节点

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值