DOM与BOM,DOM属性

DOM

Document Object Model 文档对象模型

节点

节点属性

//=======结构=======
<body>
aaaa
 <div id="div1">
        <span></span>
        <span></span>
        <span></span>
    </div>
    <div>
        <span></span>
        <span></span>
        <span></span>
    </div>
</body>

a.nodeName

节点名 如果是标签 节点名就是标签名,大写

  var div=document.getElementById("div1");
         console.log(div.nodeName);//-----DIV

b.nodeType 节点类型
1.元素 2.属性 3.文本 4.注释 5.文档

c.nodeValue 节点值

文本内容和注释内容,标签没有节点值null

获取DOM元素

    //===通过id获取元素列表
    document.getElementById("div1");

    //===通过class获取元素列表 HTMLCollection
    document.getElementsByClassName("div");

    //===通过标签名获取列表 HTMLCollection
    document.getElementsByTagName("div")

    //===通过name获取元素 大多数用于表单  NodeList  必须使用document
    console.log(document.getElementsByName("name"))


    //===可以通过选择器获取元素  如果有多个div使用选择器div时只能获取到列表中的第一个
    document.querySelector("div.div1");
    document.querySelector("div[type~=a]");

    //===可以通过选择器获取所有元素列表  NodeList
    document.querySelectorAll("div")


    var div=document.getElementById("div1");
    var span=div.getElementsByTagName("span");
    console.log(span)

节点遍历

 var div=document.getElementById("div1");
        console.log(div.parentNode);  父节点
        console.log(div.parentElement); 父元素

        console.log(div.childNodes); 子节点 NodeList
        console.log(div.children); 子元素  HTMLCollection

        console.log(div.firstChild)   第一个子节点
        console.log(div.firstElementChild)  第一个子元素


        console.log(div.lastChild)   最后一个子节点
        console.log(div.lastElementChild)  最后一个子元素


        console.log(div.previousSibling)   上一个兄弟节点
        console.log(div.previousElementSibling)  上一个兄弟元素

        console.log(div.nextSibling)  下一个兄弟节点
        console.log(div.nextElementSibling) 下一个兄弟元素

创建元素

把子元素添加在父元素的尾部
  //====创建元素====
   var div=document.createElement("div");
   //===把子元素添加在父元素的尾部===
   document.body.appendChild(div);
给ul里拼接10个li
    var ul=document.createElement("ul");
    for(var i=0;i<10;i++){
        var li=document.createElement("li");
        ul.appendChild(li);
    }
    document.body.appendChild(ul);
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    //===创建文档碎片
   var a=document.createDocumentFragment();
   //===循环
	  for(var i=0;i<100;i++){
	      var div=document.createElement("div");
	      a.appendChild(div);
	  }
	  document.body.appendChild(a);

    将子元素插入到父元素的尾部
      父元素.appendChild(子元素);

    将元素插入在父元素中某个子元素的前面
       父元素.insertBefore(新元素,插入在谁的前面);
        // var div=document.createElement("div");
        // document.body.insertBefore(div,document.body.firstChild);
        
    复制元素
       需要复制的元素.cloneNode(是否深复制));
       //====深复制(true)--复制子元素   浅复制(false)--不复制子元素
       var bn=document.querySelector("button");
       var bn1=bn.cloneNode(true);
        document.body.appendChild(bn1);
        
       深复制  将该元素的节点和所有子节点及后代节点全部复制
       浅复制  只复制当前元素

      删除元素
    元素.remove(); 删除
	// bn.remove();
            
    父元素.removeChild(子元素);
   // document.body.removeChild(bn);

    替换
    父元素.replaceChild(新元素,旧元素);
    // var p=document.createElement("p");
    //  document.body.replaceChild(p,bn);

DOM属性

  div.innerHTML
  获取  HTML 内容
  设置  HTML内容
  div.innerText
  获取 获取当前元素的文本及后代的所有文本组成的字符串
  设置 当使用\n和\r 会自动补充<br>换行
  div.textContent
  获取 可以获取到当前元素的文本及后代所有文本组成字符串及格式
  设置  当使用\n和\r 并不会换行
 document.createTextNode(文本)  创建文本节点
 var txt=document.createTextNode("3");  
div.insertBefore(txt,div.firstElementChild);

如果标签属性时系统自带的该标签的属性,这时候我们可以通过DOM对象调用该属性(除class以外)

  <input type="text" id="input" class="divs">

  var input=document.querySelector("#input");

  console.log(input.type);

class 属性使用className获取和设置

  console.log(input.className)

所有可以不用赋值的属性(属性名和属性值相同的)

  <input type="text" id="input" value="123" name="textInput" disabled>
  <input type="checkbox" checked> 

disabled 和 checked,在DOM 对象中使用布尔值来设置和取消

 var input=document.querySelector("#input");
     input.disabled=true;
  div.a=10;  console.dir(div)获取div得所有属性

自定义的也包括对象属性和标签属性,这两种自定义的属性,不共通

设置和获取标签属性div.setAttribute(标签属性名,标签属性值)
获取标签属性div.getAttribute(标签属性名);
删除标签属性div.removeAttribute(标签属性名)
标签属性的命名和赋值要注意 使用-连接,不要写大写字母        
document.title      
  document.body       
 document.documentElement  
 document.head       
 document.URL //地址        
document.domain //域名        
console.log(document.URL)        
console.log(document.domain)

DOM样式

样式 CSS样式  行内样式 
console.log(div.style.width) 获取div的行内样式属性
获取计算后样式  
var style=getComputedStyle(div);console.log(style.color)//兼容低版本 
console.log(div.currentStyle.color)

try catch

    var width;
        try{
            // 试试
            width=getComputedStyle(div).width;
        }catch(e){
            // 如果上面试试出错,执行下面的内容
            width=div.currentStyle.width;
        }
        console.log(width)

设置行内样式

              div.style="width:50px;height:50px;color:blue;background-color:red";
            div.style.width="50px";
            div.style.height="50px";
            div.style.color="blue";
            div.style.backgroundColor="red"
 function cloneObj(target,source){
                for(var key in source){
                    target[key]=source[key];
                }
            }

            var div=document.querySelector("div");
            cloneObj(div.style,{
                width:"50px",
                height:"50px",
                backgroundColor:"red"
            })
  Object.assign(div.style,{
                width:"50px",
                height:"50px",
                backgroundColor:"blue",
                
            } as CSSStyleDeclaration)
            需要删掉

DOM的对象属性

client 客户的

offset 偏移的

scroll 滚动条的

clientWidth  clientHeight  内容+padding-滚动条轨道宽度
offsetWidth  offsetHeight  内容+padding+border 实际占位宽高
scrollWidth  scrollHeight  实际内容宽高,如果实际内容宽高小于client宽高时,等于客户宽高
 body
如果内容宽度不超过html宽度时,三个值相同
如果内容宽度超过了html宽度时,clientWidth等于offsetWidth都是html宽度-滚动条滑道宽度
三个高度是完全一样的,都是内容高度
        console.log(document.body.clientWidth,document.body.clientHeight)
        console.log(document.body.offsetWidth,document.body.offsetHeight)
        console.log(document.body.scrollWidth,document.body.scrollHeight)

html
clientHeight 可视区域高度-滚动条轨道高度
offsetWidth clientWidth 可视区域宽度
offsetHeight scrollHeight 内容高度
scrollWidth 内容宽度
        console.log(document.documentElement.clientWidth,document.documentElement.clientHeight)
        console.log(document.documentElement.offsetWidth,document.documentElement.offsetHeight)
        console.log(document.documentElement.scrollWidth,document.documentElement.scrollHeight)
console.log(div3.clientLeft,div3.clientTop);//元素的边线粗细
        console.log(div3.offsetLeft,div3.offsetTop);//距离父元素的左上角距离(父元素定位)
        console.log(div2.scrollLeft,div2.scrollTop);
        div2.scrollTop=300; //容器的滚动条位置 这个值是可读可写,其他属性都不可写只能读
        console.log(div3.scrollTop)

早期版本中滚动条属于body,现在是html的

html的滚动条必须在页面渲染完成后才可以设置的,如果是元素的滚动条可以直接设置

document.body
document.documentElement

BOM

Browser Object Model 浏览器对象模型

浏览器中JS可以控制所有对象 这些对象都是从属于window对象
document 文档
location 本地
history 历史
screen 屏幕
navigator 导航

posted @ 2021-12-18 10:06  满天星可以嘛  阅读(38)  评论(0编辑  收藏  举报