企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 属性和方法 以上属性和方法可适用于所有 HTML 元素: | 属性 / 方法 | 描述 | | :-- | :-- | | [*element*.accessKey](https://www.runoob.com/jsref/prop-html-accesskey.html) | 设置或返回accesskey一个元素 | | [*element*.addEventListener()](https://www.runoob.com/jsref/met-element-addeventlistener.html) | 向指定元素添加事件句柄 | | [*element*.appendChild()](https://www.runoob.com/jsref/met-node-appendchild.html) | 为元素添加一个新的子元素 | | [*element*.attributes](https://www.runoob.com/jsref/prop-node-attributes.html) | 返回一个元素的属性数组 | | [*element*.childNodes](https://www.runoob.com/jsref/prop-node-childnodes.html) | 返回元素的一个子节点的数组 | | [*element*.children](https://www.runoob.com/jsref/prop-element-children.html) | 返回元素的子元素的集合 | | [*element*.classList](https://www.runoob.com/jsref/prop-element-classList.html) | 返回元素的类名,作为 DOMTokenList 对象。 | | [*element*.className](https://www.runoob.com/jsref/prop-html-classname.html) | 设置或返回元素的class属性 | | *element*.clientHeight | 在页面上返回内容的可视高度(不包括边框,边距或滚动条) | | *element*.clientWidth | 在页面上返回内容的可视宽度(不包括边框,边距或滚动条) | | [*element*.cloneNode()](https://www.runoob.com/jsref/met-node-clonenode.html) | 克隆某个元素 | | [*element*.compareDocumentPosition()](https://www.runoob.com/jsref/met-node-comparedocumentposition.html) | 比较两个元素的文档位置。 | | [*element*.contentEditable](https://www.runoob.com/jsref/prop-html-contenteditable.html) | 设置或返回元素的内容是否可编辑 | | [*element*.dir](https://www.runoob.com/jsref/prop-html-dir.html) | 设置或返回一个元素中的文本方向 | | [*element*.firstChild](https://www.runoob.com/jsref/prop-node-firstchild.html) | 返回元素的第一个子节点,注意文字也是文本节点,eg:`<tr><td id="t1">one</td></tr>`<br>` console.log(document.getElementById("t1").firstChild)//"one"`<br>`<tr><td id="t2"><span>two</span></td></tr>` <br>`console.log(document.getElementById("t1").firstChild)//<span>two</span>`| | [*element*.focus()](https://www.runoob.com/jsref/met-html-focus.html) | 设置文档或元素获取焦点 | | [*element*.getAttribute()](https://www.runoob.com/jsref/met-element-getattribute.html) | 返回指定元素的属性值 | | [*element*.getAttributeNode()](https://www.runoob.com/jsref/met-element-getattributenode.html) | 返回指定属性节点 | | [*element*.getElementsByTagName()](https://www.runoob.com/jsref/met-element-getelementsbytagname.html) | 返回指定标签名的所有子元素集合。 | | [*element*. getElementsByClassName()](https://www.runoob.com/jsref/met-element-getelementsbyclassname.html) | 返回文档中所有指定类名的元素集合,作为 NodeList 对象。 | | *element*.getFeature() | 返回指定特征的执行APIs对象。 | | *element*.getUserData() | 返回一个元素中关联键值的对象。 | | [*element*.hasAttribute()](https://www.runoob.com/jsref/met-element-hasattribute.html) | 如果元素中存在指定的属性返回 true,否则返回false。 | | [*element*.hasAttributes()](https://www.runoob.com/jsref/met-node-hasattributes.html) | 如果元素有任何属性返回true,否则返回false。 | | [*element*.hasChildNodes()](https://www.runoob.com/jsref/met-node-haschildnodes.html) | 返回一个元素是否具有任何子元素 | | [*element*.hasFocus()](https://www.runoob.com/jsref/met-document-hasfocus.html) | 返回布尔值,检测文档或元素是否获取焦点 | | [*element*.id](https://www.runoob.com/jsref/prop-html-id.html) | 设置或者返回元素的 id。 | | [*element*.innerHTML](https://www.runoob.com/jsref/prop-html-innerhtml.html) | 设置或者返回元素的内容。 | | [*element*.insertBefore()](https://www.runoob.com/jsref/met-node-insertbefore.html) | 现有的子元素之前插入一个新的子元素 | | [*element*.isContentEditable](https://www.runoob.com/jsref/prop-html-iscontenteditable.html) | 如果元素内容可编辑返回 true,否则返回false | | [*element*.isDefaultNamespace()](https://www.runoob.com/jsref/met-node-isdefaultnamespace.html) | 如果指定了namespaceURI 返回 true,否则返回 false。 | | [*element*.isEqualNode()](https://www.runoob.com/jsref/met-node-isequalnode.html) | 检查两个元素是否相等 | | [*element*.isSameNode()](https://www.runoob.com/jsref/met-node-issamenode.html) | 检查两个元素所有有相同节点。 | | [*element*.isSupported()](https://www.runoob.com/jsref/met-node-issupported.html) | 如果在元素中支持指定特征返回 true。 | | [*element*.lang](https://www.runoob.com/jsref/prop-html-lang.html) | 设置或者返回一个元素的语言。 | | [*element*.lastChild](https://www.runoob.com/jsref/prop-node-lastchild.html) | 返回的最后一个子节点 | | [*element*.namespaceURI](https://www.runoob.com/jsref/prop-node-namespaceuri.html) | 返回命名空间的 URI。 | | [*element*.nextSibling](https://www.runoob.com/jsref/prop-node-nextsibling.html) | 返回该元素紧跟的一个节点 | | [*element*.nextElementSibling](https://www.runoob.com/jsref/prop-element-nextelementsibling.html) | 返回指定元素之后的下一个兄弟元素(相同节点树层中的下一个元素节点)。 | | [*element*.nodeName](https://www.runoob.com/jsref/prop-node-nodename.html) | 返回元素的标记名(大写) | | [*element*.nodeType](https://www.runoob.com/jsref/prop-node-nodetype.html) | 返回元素的节点类型 | | [*element*.nodeValue](https://www.runoob.com/jsref/prop-node-nodevalue.html) | 返回元素的节点值 | | [*element*.normalize()](https://www.runoob.com/jsref/met-node-normalize.html) | 使得此成为一个"normal"的形式,其中只有结构(如元素,注释,处理指令,CDATA节和实体引用)隔开Text节点,即元素(包括属性)下面的所有文本节点,既没有相邻的文本节点也没有空的文本节点 | | *element*.offsetHeight | 返回任何一个元素的高度包括边框和填充,但不是边距 | | *element*.offsetWidth | 返回元素的宽度,包括边框和填充,但不是边距 | | *element*.offsetLeft | 返回当前元素的相对水平偏移位置的偏移容器 | | *element*.offsetParent | 返回元素的偏移容器 | | *element*.offsetTop | 返回当前元素的相对垂直偏移位置的偏移容器 | | [*element*.ownerDocument](https://www.runoob.com/jsref/prop-node-ownerdocument.html) | 返回元素的根元素(文档对象) | | [*element*.parentNode](https://www.runoob.com/jsref/prop-node-parentnode.html) | 返回元素的父节点 | | [*element*.previousSibling](https://www.runoob.com/jsref/prop-node-previoussibling.html) | 返回某个元素紧接之前元素 | | [*element*.previousElementSibling](https://www.runoob.com/jsref/prop-element-previouselementsibling.html) | 返回指定元素的前一个兄弟元素(相同节点树层中的前一个元素节点)。 | | [*element*.querySelector()](https://www.runoob.com/jsref/met-element-queryselector.html) | 返回匹配指定 CSS 选择器元素的第一个子元素 | | document.querySelectorAll() | 返回匹配指定 CSS 选择器元素的所有子元素节点列表 | | [*element*.removeAttribute()](https://www.runoob.com/jsref/met-element-removeattribute.html) | 从元素中删除指定的属性 | | [*element*.removeAttributeNode()](https://www.runoob.com/jsref/met-element-removeattributenode.html) | 删除指定属性节点并返回移除后的节点。 | | [*element*.removeChild()](https://www.runoob.com/jsref/met-node-removechild.html) | 删除一个子元素 | | [*element*.removeEventListener()](https://www.runoob.com/jsref/met-element-removeeventlistener.html) | 移除由 addEventListener() 方法添加的事件句柄 | | [*element*.replaceChild()](https://www.runoob.com/jsref/met-node-replacechild.html) | 替换一个子元素 | | *element*.scrollHeight | 返回整个元素的高度(包括带滚动条的隐蔽的地方) | | *element*.scrollLeft | 返回当前视图中的实际元素的左边缘和左边缘之间的距离 | | *element*.scrollTop | 返回当前视图中的实际元素的顶部边缘和顶部边缘之间的距离 | | *element*.scrollWidth | 返回元素的整个宽度(包括带滚动条的隐蔽的地方) | | [*element*.setAttribute()](https://www.runoob.com/jsref/met-element-setattribute.html) | 设置或者改变指定属性并指定值。 | | [*element*.setAttributeNode()](https://www.runoob.com/jsref/met-element-setattributenode.html) | 设置或者改变指定属性节点。 | | *element*.setIdAttribute() | | | *element*.setIdAttributeNode() | | | *element*.setUserData() | 在元素中为指定键值关联对象。 | | *element*.style | 设置或返回元素的样式属性 | | [*element*.tabIndex](https://www.runoob.com/jsref/prop-html-tabindex.html) | 设置或返回元素的标签顺序。 | | [*element*.tagName](https://www.runoob.com/jsref/prop-element-tagname.html) | 作为一个字符串返回某个元素的标记名(大写) | | [*element*.textContent](https://www.runoob.com/jsref/prop-node-textcontent.html) | 设置或返回一个节点和它的文本内容 | | [*element*.title](https://www.runoob.com/jsref/prop-html-title.html) | 设置或返回元素的title属性 | | *element*.toString() | 一个元素转换成字符串 | | [*nodelist*.item()](https://www.runoob.com/jsref/met-nodelist-item.html) | 返回某个元素基于文档树的索引 | | [*nodelist*.length](https://www.runoob.com/jsref/prop-nodelist-length.html) | 返回节点列表的节点数目。 | ## **节点组成:** Document就是文档的根节点 节点= 标签(元素)节点+属性节点+文本节点 nodeType:节点类型 节点名称:nodeName 节点值:nodeValue 例子: ~~~ <ul> <li>高效的程序员</li> <li data="1">当世界末日还剩余五分钟的时候</li> <li>女朋友说:让我们做点什么吧</li> <li>男朋友说:让我们在做最后一次吧</li> <li>剩下的的4分50秒做什么</li> </ul> <script> // 节点:属性 var li = document.getElementsByTagName('li'); // 标签节点 console.log('标签节点的类型:'+li[0].nodeType); // 1 console.log('标签节点的名称:'+li[0].nodeName); // LI console.log('标签节点的值:'+li[0].nodeValue); // null // 属性节点 // 获取第二个li的属性 var attr = li[1].attributes; console.log(attr); console.log('属性节点的类型'+attr[0].nodeType); // 2 console.log('属性节点的名称'+attr[0].nodeName); // data console.log('属性节点的值'+attr[0].nodeValue); // 1 // node:节点 child:孩子 // 文本节点 var text = li[2].childNodes; console.log(text); console.log('文本节点的类型:'+text[0].nodeType); // 3 console.log('文本节点的名称:'+text[0].nodeName); // #text console.log('文本节点的值:'+text[0].nodeValue); // 女朋友说:让我们做点什么吧 /* 节点:标签+属性+文本 标签.nodeType 属性.nodeName 文本.nodeValue (*)节点类型(nodeType) 1 2 3 节点名称(nodeName) 返回标签名 返回属性名 #text 节点值(nodeValue) null 属性值 文本内容 */ ~~~ ## ## **节点访问:** **父节点** 获取父节点:                   parentNode    \[子节点对象.parentNode\] **兄弟节点** 获取上一个兄弟节点: previousSibling 获取下一个兄弟节点: nexSibling 获取下一个兄弟标签节点:     nextElementSibling 获取第一个子节点:        firstElementChild **子节点 :** 所有之节点: childNodes 所有标签子节点: .children   所有标签子节点: .getElementsByTagName("li"); 第一个子标签节点[IE9+]: .firstElementChild 第一个子子节点: .firstChild;//等于c1[0] 最后一个子节点: .lastChild; **创建节点** 创建节点(元素)  createElement("标签名") 创建文本节点:createTextNode("文本内容") 创建属性节点:createAttribute("属性名") **追加节点** 追加文本节点(末尾追加):appendChild("子节点对象") 在指定的旧子节点前面插入新子节点: insertBefore("新子节点对象", "旧子节点对象") **克隆节点** 克隆:cloneNode() 克隆子节点:replaceChild("新子节点对象", "旧子节点对象") **删除节点** 删除节点:removeChild("子节点对象") **特殊** innerHTML也可以完成DOM的增删改相关操作 ``` <ul id="list"> <li>1</li> <li>2</li> <li>3</li> </ul> <script type="text/javascript"> /* 方法1 */ var parent_ul=document.getElementById("list"); var new_son_li=document.createElement("li"); var li_text=document.createTextNode("a"); new_son_li.appendChild(li_text); parent_ul.appendChild(new_son_li); /* 方法2 */ var parent_ul=document.getElementById("list"); var new_son_li=document.createElement("li"); parent_ul.innerHTML+="<li>b</li>"; /* 此方法比较消耗性能他会将li全删掉在插入,一般两种方式结合 */ /* 结合 */ var parent_ul=document.getElementById("list"); new_son_li.innerHTML+="c"; parent_ul.appendChild(new_son_li); </script> ``` ## ## **节点属性操作:** 获取属性:getAttribute 设置属性:setAttribute          setAttributeNode(attributeNode) 删除属性:removeAttribute          removeAttributeNode(attributeNode) **创建属性节点** ``` document.createAttribute() //创建一个属性节点 ``` 获取属性节点 ``` element.attributes;//返回一个元素的属性数组 document.getElementById("xxoo").attributes[0];//element.attributes[0] element.getAttributeNode();//返回指定属性节 document.getElementsByTagName("a")[0].getAttributeNode("target"); element.title;//设置或返回元素的title属性 element.className;//设置或返回元素的class属性 ``` **重命名属性** ``` document.renameNode()//重命名元素或者属性节点。 ``` **修改属性** ``` element.setAttribute("eg:type","eg:button");//设置或者改变指定属性并指定值。 element.setAttributeNode("eg:class、name、id、value");//设置或者改变指定属性节点。 ``` 删除属性 ``` element.removeAttribute()从元素中删除指定的属性 element.removeAttributeNode()删除指定属性节点并返回移除后的节点。 ``` **获取属性的值** ``` element.getAttribute();//返回指定元素的属性值 ``` **判断元素中是否有属性** ``` element.hasAttribute("xxoo");//如果元素中存在指定的属性返回 true,否则返回false。 element.hasAttributes();//如果元素有任何属性返回true,否则返回false。 ``` **例子:** 1、获取属性  element.getAttribute(‘属性名’); //返回指定元素属性名的属性值  element.getAttributeNode(‘属性名’); //返回指定元素的属性名和属性值  element.attributes\[‘属性名’\];//返回指定元素的属性名和属性值  **获取元素的子节点** ``` /* 获取元素节点 */ var e=document.getElementById("list"); /* 获取该元素的子节点 */ var c=e.getElementsByTagName("li"); var c1=e.childNodes; //返回包含标签属性及文本节点,标签与标签之间的空格与换行也会被当作文本节点(IE8及以下除外) var c2 =e.children;//获取所有子标签 var c3=e.firstElementChild;//获取当前元素第一个子标签[IE9+] var c4=e.firstChild;//等于c1[0] var c5=e.lastChild; console.log(e); console.log(c); console.log(c1); console.log(c2); console.log(c3); console.log(c4); ``` ~~~ <div id="box" class="classa"> 这是一个段落 </div> <script> var box=document.getElementById("box"); var attr=box.getAttribute('class'); console.log(attr); //classa var attr2=box.getAttributeNode('id'); console.log(attr2); //id="box"; var attr3=box.attributes['id']; console.log(attr3); //id="box"; </script> ~~~ 2、设置属性  element.setAttribute(name,value); //添加指定的属性,并为其赋指定的值。IE8及以下不支持  element.setAttributeNode(attrNode); //向元素中添加指定的属性节点,如果这个指定的属性已存在,则此方法会替换它 ~~~ <div id="box" class="classa">这是一个段落</div> <script> var box=document.getElementById("box"); //设置属性 box.setAttribute('class','classb'); console.log(box); //<div id="box" class="classb">这是一个段落</div> //先创建属性节点,再设置属性值,最后设置属性 var attr=document.createAttribute('name'); attr.nodeValue="p1"; box.setAttributeNode(attr); console.log(box); //<div id="box" class="classb" name="p1">这是一个段落</div> </script> ~~~ 3、删除属性  element.removeAttribute(‘属性名’); //删除指定的属性,此方法不返回值  element.removeAttributeNode(attrNode); //删除指定的属性,并以 Attr Node 对象返回被删除的属性。 ~~~ <div id="box" class="classa">这是一个段落</div> <script> var box=document.getElementById("box"); //移除属性 var attr=box.removeAttribute('class'); console.log(box); //<div id="box">这是一个段落</div> console.log(attr); //undefined //先获取属性,在删除指定属性 var attr2=box.getAttributeNode('id'); var attr3=box.removeAttributeNode(attr2); console.log(box); //<div>这是一个段落</div> console.log(attr2); //id="box" console.log(attr3); //id="box" </script> ~~~ 向div中追加一段文字 ~~~ <p id="p1">这是一个段落。</p> <p id="p2">这是另一个段落。</p> </div> <script> //创建p标签 var para=document.createElement("p"); //创建文本节点 var node=document.createTextNode("这是一个新段落。"); //appendChild() 方法向节点添加最后一个子节点 para.appendChild(node); //获取父节点 var element=document.getElementById("div1"); //向父节点追加子节点 element.appendChild(para); //您也可以使用 appendChild() 方法从一个元素向另一个元素中移动元素。 <ul id="myList1"> <li>Coffee</li> <li>Tea</li> </ul> <ul id="myList2"> <li>Water</li> <li>Milk</li> </ul> <p id="demo">请点击按钮把项目从一个列表移动到另一个列表中。</p> <button onclick="myFunction()">亲自试一试</button> <script> function myFunction() { //获取myList2的最后一个子节点 var node=document.getElementById("myList2").lastChild; //将获取myList2的最后一个子节点追加到myList1最后 document.getElementById("myList1").appendChild(node); } </script> ~~~ ~~~ <ul> <li>1.春儿和静静的对话</li> <li>2早上春儿去厕所,突然发现少了什么东西</li> <li>3忘记带碗筷了吗?</li> <li>4滚...</li> <li>5忘记带纸了吗</li> <li>6嗯嗯嗯。。。</li> <li>7呵呵呵呵,看你吃完用什么擦嘴</li> <li>8呵呵呵</li> </ul> <script> // 获取ul的子节点(ul和li之间,li和li之间有空格,空格是文本节点) var ul = document.getElementsByTagName('ul')[0]; // 获取li var list = ul.childNodes; alert(list);//[object NodeList] alert(list.length); // 17 function getElement(obj){ // 过滤文本节点,获取标签节点(nodeType) var arr = []; for (var i = 0; i < obj.length; i++) { // 标签节点 if (list[i].nodeType == 1) { arr.push(list[i]); } } console.log(arr); } getElement(list); </script> ~~~ ~~~ <div> <ul> <li>合路,你为什么迟到了</li> <li id="shuijiao">因为我睡过了</li> <li>你为什么睡过了呢</li> <li>因为梦里老师讲的好,我想多听会儿</li> </ul> </div> <script> /* // 获取子节点 firstChild: lastChild: childNodes: // 获取父节点 parentNode: // 获取属性节点 attributes: // 同辈元素 nextSibling: previouSibling: */ var ul = document.getElementsByTagName('ul')[0]; var shuijiao = document.getElementById('shuijiao'); // 获取子节点 console.log(ul.childNodes); // ul.firstChild:第一个子节点 console.log(ul.firstChild); // ul.lastChild获取最后一个子节点 console.log(ul.lastChild); // shuijiao.parentNode:获取父节点 console.log(shuijiao.parentNode); // nextSibling:获取下一个兄弟节点 console.log(shuijiao.nextSibling); // previousSibling:获取上一个同辈节点 console.log(shuijiao.previousSibling); </script> ~~~ ~~~ 节点的方法 var box = document.getElementById('box'); append:追加 box.appendChild(node):将node追加到box的末尾 insert:插入 before:在。。。之前 box.insertBefore(newNode, oldNode):在box内,在oldNode的前面插入一个newNode box.replaceChild(newNode, oldNode):在box内部,将oldNode替换为newNode box.removeChild(node):删除box内部的node节点 img.cloneNode(true):克隆所有的标签属性和文本节点 img.cloneNode():只克隆标签和属性 ~~~ ~~~ <div id="box" style="width:600px;height:500px;border:1px solid red;"> </div> <button>在div#box的末尾追加一张图片</button> <button>在div#box的第一站图片之前插入一张图片</button> <button>替换div#box的最后一张图片</button> <button>用第一张图片替换最后一张图片</button> <button>删除最后一张图片</button> <button>克隆第一张图片放到最后</button> <script> // 1.获取button按钮对象 var btn = document.getElementsByTagName('button'); var box = document.getElementById('box'); // 2.按钮 btn[0].onclick = function(){ // 2.1 创建图片标签 var img = document. ('img'); img.src = 'tao/'+getRand(1,11)+'.jpg'; // 2.2 将创建的img标签追加到box内 box.appendChild(img); } btn[1].onclick = function(){ // 1.获取第一张图片对象 var old = box.firstChild; // 2.新的图片对象 var newImg = document.createElement('img'); newImg.src = 'tao/'+getRand(1,11)+'.jpg'; // 3.insertBefore() box.insertBefore(newImg, old); } btn[2].onclick = function(){ // 1.找最后一张图片 var oldImg = box.lastChild; // 2.创建新的图片 var newImg = document.createElement('img'); newImg.src = 'tao/'+getRand(1,11)+'.jpg'; // 3.执行替换 box.replaceChild(newImg, oldImg); } // 用第一张替换最后一张 // box.replaceChild(new,old) /* 一个页面中的对象是独一无二的 */ btn[3].onclick = function(){ // 1.先获取第一张图片 var newImg = box.firstChild; // 2.获取最后一张图片 var oldImg = box.lastChild; // 3.执行替换 box.replaceChild(newImg,oldImg); } // 删除最后一张图片 btn[4].onclick = function(){ // 1.获取最后一张图片 var last = box.lastChild; // 2.执行删除操作 box.removeChild(last); } // 将克隆第一个图片放到box的最后位置 btn[5].onclick = function(){ // 1.获取第一个图片对象 var first = box.firstChild; // 2.克隆之后的节点 var firstImg = first.cloneNode(true); // 3.将克隆之后的节点放在最后的位置 box.appendChild(firstImg); } console.log(btn[3].cloneNode()); console.log(btn[3].cloneNode(true)); // 获取随机数 function getRand(n,m){ return Math.ceil(Math.random()*1000000)%(m-n+1)+n; } </script> ~~~ ~~~ <a href="http://tokyo-hot.com" data="xiaoxiaoze" title="全球最大的培训基地">兄弟连</a> <script> // 获取并改变HTML标签的属性 /* 系统就有的属性:对象.属性值 自定义属性:对象.setAttribute() 对象.getAttribute() */ // 获取a连接对象 var link = document.getElementsByTagName('a')[0]; // 获取link的属性 console.log(link.href); // 改变属性值 link.title = '全宇宙最大的影视基地'; // 自定义的属性不可以直接获取 // console.log(link.data); //undefined console.log(link.getAttribute('href')); console.log(link.getAttribute('data')); // setAttribute() link.setAttribute('title','北京这会儿好冷,为什么东京这么热呢,因为有东京热'); </script> ~~~ ~~~ <body> <div id="box" style="width:300px;height:300px;"> </div> <img src="tao/1.jpg" alt="" id="img"> <script> // 获取并改变html标签样式 var box = document.getElementById('box'); var img = document.getElementById('img'); // 只能获取行内样式 // alert(box.style.width); // alert(box.style.height); // alert(box.style.background); // alert(document.defaultView.getComputedStyle(box,null)['background-color']); // alert(box.currentStyle['background-color']); // 兼容IE8及其以下的浏览器 // 兼容IE8和火狐谷歌最新的IE function getStyle(obj, attr){ if (obj.currentStyle) { return obj.currentStyle[attr]; } else { return document.defaultView.getComputedStyle(obj,null)[attr]; } } alert(getStyle(box, 'background-color')); // 直接改变html的样式 box.style.width = '500px'; img.width = 100; // 没有单位 img.style.height = '200px'; </script> ~~~ ~~~ <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <style> .hover{ color:red; font-size: 20px; background: blue; } .click{ color:green; background: yellow; font-size: 30px; } </style> </head> <body> <ul> <li>程序员最讨厌康熙的那个儿子</li> <li>八阿哥(bug)</li> <li>女朋友给男朋友说:烟盒上有警告,说抽烟有害健康</li> <li>我只关心error,不关心警告</li> </ul> <script> // 当鼠标放上去的时候,字体变大变红,移开鼠标效果消失 // 1.获取对象 var li = document.getElementsByTagName('li'); // 2鼠标的移入和移出 for (var i = 0; i < li.length; i++) { li[i].onmouseover = function(){ // this.style.color = 'red'; // this.style.fontSize = '20px'; // this.style.background = 'blue'; // this.style.fontWeight = 'bold'; // 鼠标放上去,如果是click,保留,如果不是click,设置为hover if (this.className == 'click') { this.className = 'click'; } else { this.className = 'hover'; } } li[i].onmouseout = function(){ // this.style.color = '#000'; // this.style.fontSize = '16px'; // 如果是点击状态,保持.click if (this.className == 'click') { this.className = 'click'; } else { this.className = ''; } } li[i].onclick = function(){ // if (this.style.background == 'yellow') { // this.style.background = ''; // } else { // this.style.background = 'yellow'; // } if (this.className != 'click') { this.className = 'click'; } else { this.className = ''; } } } // 任务:当鼠标放上去并且点击的时候,出现改变为红色背景并且不能消失,直到下次点击才能消失 </script> </body> </html> ~~~