1.dom元素对象
html中每个标签都可以看做一个元素对象
可以通过document对象获取
如何通过document对象获取document.getElementById(“id属性值”);
返回对拥有指定 id 的第一个对象的引用。
document.getElementsByClassName(“class属性值”);
返回文档中所有指定类名的元素数组
document.getElementsByName(“name属性值”);
返回带有指定名称的对象数组。
document.getElementsByTagName(“标签名”)
返回带有指定标签名的对象数组。
常用属性
- className 设置/获取class属性
- innerText 设置/获取标签内部文本,如果文本包含html标签,不会被解析
- innerHTML 设置/获取标签内部html,如果文本包含html标签,会被解析
- parentNode 获取当前标签父标签
- style 设置或返回元素的样式属性(元素对象.style.css属性 = 值) 常用方法
- removeAttribute(“属性名”); 删除该属性
- getElementsByTagName(“标签名”); 根据标签名获取该元素内的元素对象
- getElementsByClassName(“class属性名”); 根据class属性值获取该元素内的元素对象
- remove(); 删除该元素对象
- setAttribute(“属性名”,”值”); 设置该元素对象的该属性值
1.1霓虹灯案例
所用的属性和方法 - className 设置/获取class属性
removeAttribute(“属性名”); 删除该属性
<!DOCTYPE html><html><head><meta charset="utf-8"><title></title><style type="text/css">.pc {color: blue;}</style></head><body><h3>登高</h3><p>风急天高猿啸哀,</p><p>渚清沙白鸟飞回。</p><p>无边落木萧萧下,</p><p>不尽长江滚滚来。</p><button type="button" onclick="changeColor();">修改标题颜色</button></body><!--元素对象:属性className 设置或获取class属性方法removeAttribute("属性名")--><script type="text/javascript">function changeColor() {/*length可以通过下标获取*/var ps = document.getElementsByTagName("p");var index = 0;setInterval(function(){//每次都先把所有样式删除for(var i=0; i<ps.length; i++) {ps[i].removeAttribute("class");}//为指定标签添加样式ps[index++%4].className = "pc";},500);}</script></html>
1.2跑马灯案例
<!DOCTYPE html><html><head><meta charset="utf-8"><title></title><style type="text/css">div {width: 100px;height: 100px;border: 1px solid #0000FF;margin: 10px;float: left;}.pc {background-color: #FF0000;}</style></head><body><div></div><div></div><div></div><div></div><button type="button" onclick="changeColor();">修改标题颜色</button></body><script type="text/javascript">function changeColor() {/*length可以通过下标获取*/var divs = document.getElementsByTagName("div");var index = 0;setInterval(function(){//每次都先把所有样式删除for(var i=0; i<divs.length; i++) {divs[i].removeAttribute("class");}//为指定标签添加样式divs[index++%4].className = "pc";},500);}</script></html>
1.3计算总金额案例
所用到的属性和方法
- innerText
getElementsByTagName(“标签名”) ```html <!DOCTYPE html>
<meta charset="utf-8"><title></title>
<table border="1px" ><tr><td>商品名称</td><td>价格</td><td>数量</td><td>金额</td></tr><tr><td>iphone14</td><td>8000</td><td>2</td><td>16000</td></tr><tr><td>特斯拉Model4</td><td>300000</td><td>3</td><td>900000</td></tr><tr><td>外星人</td><td>20000</td><td>3</td><td>60000</td></tr><tr><td colspan="3" style="text-align: right;"><button type="button" onclick="totalMoney();">总计</button></td><td id="totalMoney"></td></tr></table>
</body><script type="text/javascript">/*元素:属性innerText : 获取标签内的文本innerHTML : 获取标签内的html方法getElementsByTagName("标签名")getElementsByClassName("class属性名")*/function totalMoney() {//1. 获取当前当前table 元素对象var table = document.getElementsByTagName("table")[0];//2. 获取table中 所有的trvar trs = table.getElementsByTagName("tr");var sum = 0;for(var i=1; i<trs.length-1; i++) {var tr = trs[i];//获取每个tr中的第四个tdvar td = tr.getElementsByTagName("td")[3];//获取td中文本(string)var money = td.innerText;sum += parseFloat(money);}//为元素的innerText属性赋值document.getElementById("totalMoney").innerHTML = sum;}</script>
<a name="kN7pt"></a>## 1.3通过js设置标签内容所用的属性- innerHTML- innerText```html<!DOCTYPE html><html><head><meta charset="utf-8"><title></title></head><body><p id="pi" class="pc" name="pn"></p><p></p></body><script>var p1 = document.getElementById("pi");var p2 = document.getElementsByTagName("p")[1];var p3 = document.getElementsByClassName("pc")[0];var p4 = document.getElementsByName("pn")[0];/*innerHTML : 设置一个标签内部的html如果文本包含html标签,会被解析innerText : 设置一个标签内部的文本如果文本包含html标签,不会被解析*/p1.innerHTML = '江郎<span style="color: red;">才</span>尽';p2.innerText = '江郎<span style="color: red;">才</span>尽';</script></html>
1.4删除商品案例
所用的属性和方法
- parentNode
remove() ```html <!DOCTYPE html>
<meta charset="utf-8"><title></title>
<table border="1px" width="400px"><tr><td>商品名称</td><td>价格</td><td>数量</td><td>金额</td><td>操作</td></tr><tr><td>iphone14</td><td>8000</td><td>2</td><td>16000</td><td><button type="button" onclick="del(this)">删除</button></td></tr><tr><td>特斯拉Model4</td><td>300000</td><td>3</td><td>900000</td><td><button type="button" onclick="del(this)">删除</button></td></tr><tr><td>外星人</td><td>20000</td><td>3</td><td>60000</td><td><button type="button" onclick="del(this)">删除</button></td></tr></table>
</body><script type="text/javascript">/*在点击事件中执行的方法,可以通过this关键,把当前标签(元素传到)方法中*/function del(btn) {var flag = confirm("确认删除该商品?");if (flag) {btn.parentNode.parentNode.remove();}}</script>
<a name="Clqya"></a>## 1.5通过js修改样式修改样式:<br />元素对象.style.css属性 = 值;```html<!DOCTYPE html><html><head><meta charset="utf-8"><title></title><style type="text/css">div {color: red;background-color: #0000FF;font-size: 20px;font-weight: 900;}</style></head><body><p id="pi">江郎才尽</p><div>大郎才不尽</div></body><script type="text/javascript">/*可以通过元素对象的style属性定义该标签的样式样式属性名和css属性名相对应css名使用中杠,style属性使用驼峰法color -- colorfont-size -- fontSize*/var p = document.getElementById("pi");p.style.color = "red";p.style.backgroundColor="yellow";p.style.fontSize = "20px";p.style.fontWeight = 900;</script></html>
2.html对象
每个标签,都是一个元素对象,但同时又是其独特的html对象
如:
input 是元素对象 同时它又是一个type=text的input对象
p 是元素对象 同时它又是一个p对象
因为不同的标签的html标签,可能会拥有自己独特的属性
<!DOCTYPE html><html><head><meta charset="utf-8"><title></title></head><body>用户名:<input id="realName" type="text" value="dd"/><p id="pi"></p><button type="button" onclick="disable(this)">禁用此按钮</button></body><script type="text/javascript">//元素对象var input = document.getElementById("realName");var p = document.getElementById("pi");/*input 元素对象 同时它又是一个type=text的input对象p 元素对象 同时它又是一个p对象因为不同的标签的html标签,可能会拥有自己独特的属性*//*input是元素对象可以使用元素对象,所有的属性和方法同时它又是type=text的input html对象可以使用该html对象的属性和方法*/input.value = "hiahia";function disable(btn) {btn.disabled = true;}</script></html>
3.购物车案例
1.1 添加购物车
1.2 计算总金额
1.3 删除商品
1.4 修改商品数量
1.5 如果添加重复商品,不新增一行,而是修改商品数量
1.6 添加,修改,删除商品,修改库存
<!DOCTYPE html><html><head><meta charset="utf-8"><title></title><style type="text/css">table {border-collapse: collapse;text-align: center;}</style></head><body><h3 align="center">商品列表</h3><table border="1px" width="400px" align="center"><tr><td>商品名称</td><td>价格</td><td>库存</td><td>操作</td></tr><tr><td>iphone14</td><td>8800</td><td>10</td><td><button type="button" onclick="addCar(this)">加入购物车</button></td></tr><tr><td>华为mate50</td><td>9000</td><td>30</td><td><button type="button" onclick="addCar(this)">加入购物车</button></td></tr><tr><td>bate耳机</td><td>1400</td><td>30</td><td><button type="button" onclick="addCar(this)">加入购物车</button></td></tr><tr><td>VR眼睛</td><td>4000</td><td>15</td><td><button type="button" onclick="addCar(this)">加入购物车</button></td></tr><tr><td>PS5</td><td>4000</td><td>3</td><td><button type="button" onclick="addCar(this)">加入购物车</button></td></tr></table><h3 align="center">购物车</h3><table border="1px" width="500px" align="center"><thead><tr><td>商品名称</td><td>价格</td><td>商品数量</td><td>金额</td><td>操作</td></tr></thead><tbody id="productCar"><!-- <tr><td>iphone14</td><td>8800</td><td><button type="button">-</button><span>1</span><button type="button">+</button></td><td>8800</td><td><button type="button">删除</button></td></tr> --></tbody><tr><td colspan="4">总计</td><td id="totalMoney">0</td></tr></table></body><script type="text/javascript">//添加购物车的方法function addCar(btn){//获取trvar tr = btn.parentNode.parentNode;//获取当前tr下所有tdvar tds = tr.getElementsByTagName("td");//获取商品名称var proName = tds[0].innerText;//获取商品价格var proPrice = tds[1].innerText;//获取商品的库存对象var inventory = tds[2];//获取库存的数量var inNum = inventory.innerText;//判断库存是否为0if(inNum == 0){alert("没有库存了,加入购物车失败");return;}//获取购物车中的所有商品的名称var tbody = document.getElementById("productCar");var proCarTrs = tbody.getElementsByTagName("tr");for (var i = 0; i < proCarTrs.length; i++) {//如果商品已经存在,则只增加商品的数量if(proName == proCarTrs[i].getElementsByTagName("td")[0].innerText){changeNum(proCarTrs[i].getElementsByTagName("button")[1],1)return;}}var html = '<tr>'+'<td>'+proName+'</td>'+'<td>'+proPrice+'</td>'+'<td>'+'<button type="button" onclick="changeNum(this,-1)">-</button>'+' <span>1</span> ' +'<button type="button" onclick="changeNum(this,1)">+</button>'+'</td>'+'<td>8800</td>'+'<td>'+'<button type="button" onclick="del(this)">删除</button>'+'</td>'+'</tr>';var newTr = tbody.insertRow();newTr.innerHTML = html;inventory.innerText = parseInt(inventory.innerText) - 1;sumMoney();}//计算总金额方法function sumMoney(){//获取所有商品金额var proCar = document.getElementById("productCar");//获取所有trvar trs = proCar.getElementsByTagName("tr");var sum = 0;//获取每个商品的金额for (var i = 0; i < trs.length; i++) {var money = trs[i].getElementsByTagName("td")[3].innerText;sum += parseFloat(money);}//将金额总计写入document.getElementById("totalMoney").innerText = sum;}//删除商品的方法function del(btn){if(confirm("是否删除该商品")){var tr = btn.parentNode.parentNode;var num = tr.getElementsByTagName("td")[2].getElementsByTagName("span")[0].innerText;carNum(btn,parseInt(num))btn.parentNode.parentNode.remove();}sumMoney();}//修改商品数量的方法function changeNum(btn,n){//获取商品的数量var td = btn.parentNode;var span = td.getElementsByTagName("span")[0];var num = span.innerText;//获得商品价格var tr = td.parentNode;var price = tr.getElementsByTagName("td")[1].innerText;//获取商品金额var money = tr.getElementsByTagName("td")[3];//判断商品数量是否大于0if(n == -1){if(num == 0){alert("数量为0");return;}}var flag = carNum(btn,-n);if(flag){return;}//商品数量写入span标签中span.innerText = parseInt(num)+n;//更新商品金额money.innerText = (parseInt(num)+n)*parseFloat(price);//更新总金额sumMoney();}//修改库存的方法function carNum(btn,n){//获取trvar trs = btn.parentNode.parentNode;//获取购物车的商品名称var td = trs.getElementsByTagName("td")[0];var CarName = td.innerText;//获取商品列表的对应商品var table = document.getElementsByTagName("table")[0];var tr = table.getElementsByTagName("tr");for (var i = 1; i < tr.length; i++) {var tds = tr[i].getElementsByTagName("td");if(CarName == tds[0].innerText){if(n == -1){if(tds[2].innerText == 0){alert("库存不足");return true;}}tds[2].innerText = parseInt(tds[2].innerText) + n;}}}</script></html>
