原生的DOM操作、jq的DOM操作及元素操作

JS中所有全局都是window的

window的作用:在封闭空间中声明一个全局的变量 
全局变量和函数都属于window

javascript

 是由什么东西组成?
 ECMAScript 核心解释器(ES5和ES6)
 DOM BOM
提供最基本的功能比如:12+5  var a = 12; function show(){}
兼容性:完全兼容。

DOM 文档对象模型 Document Object Model

就是document 操作页面的。
获取元素,修改样式,创建元素
兼容性:很好,有不兼容的,但是可以解决。

BOM 浏览器对象模型 Browser Object Model

就是window 操作浏览器
    window.onload
    window.alert();
  兼容性:基本不兼容,解决不了。

BOM

BOM 跟浏览器有关。
window
打开一个新页面。
window.open(地址)
window.open(地址,打开方式);
打开方式:
    _blank   加载到一个新的窗口
    _self    替换当前页面
    .....
window.location:
    alert(window.location);
    alert(window.location.href);
    window.location = 'http://www.baidu.com';
    alert(window.location.hash);  //#锚点信息
    alert(window.location.host);  //域名 localhost:63342
    alert(window.location.hostname); //主机名 localhost
    alert(window.location.port); //端口
    alert(window.location.protocol); //协议 http https
    alert(window.location.search); //数据信息
    alert(window.location.pathname); //路径名
window.history:
          历史
    window.history.forward(); //前进
    window.history.back();   //后退
    window.history.go(数字); //去哪个 前进:1 后退:-1 前进2个:2
confirm:
alert('提示信息')  弹出提示框
confirm('提示信息')   ——>  也有返回值:true / false
    如果选了确定  --  true
    如果选了取消 --  false
var bDel = confirm('真的要删除吗?');
    if(bDel){
        //说明点了确定,直接删除
    }else{
        //不要删
    }

DOM操作(一)

DOM树:文档的结构              
document
    标签=元素=节点
obj.tagName  获取节点的名字
(所有的字母都是大写的)

DOM结构
   获取父节点(获取他爹)
       obj.parentNode      最大的祖宗是document,在往上就是null 

   获取子节点
       childNodes 获取子节点,包括文本节点
       节点类型:
            文本节点
            标签节点
       检测节点的类型:nodeType
                obj.nodeType
                     3  文本节点
                     1  标签节点    
    
children 获取子节点(只包括第一层) 获取的子节点不包括文本节点
         只包括它的第一层子节点,不包括它的孙子级
         获取到的是一组元素 可以用下标、leng

true&&alert(1);
     &&如果两个都是真的,才是真的。如果第一个是假的,后面的不执行。
var a = false||5;
     ||   从左往右开始看,有真的取真的,如果都为假,取最后一个

获取上一个兄弟节点
obj.previousElementSibling  兼容:高版本浏览器
obj.previousSibling 兼容:ie6,7,8 
兼容写法    obj.previousElementSibling||obj.previousSibling;    

获取下一个兄弟节点
obj.nextElementSibling  兼容:高版本浏览器
obj.nextSibling 兼容:ie6,7,8    其他浏览器是文本
兼容写法   obj.nextElementSibling||obj.nextSibling; 

获取首尾子节点
首子节点
父级.firstElementChild 兼容高版本浏览器
父级.firstChild  兼容ie6,7,8
兼容写法   父级.firstElementChild||父级.firstChild  

尾子节点
父级.lastElementChild 兼容高版本浏览器
父级.lastChild  兼容ie6,7,8
兼容写法    父级.lastElementChild||父级.lastChild   
首子节点   obj.children[0]; 
尾子节点  obj.children[obj.children.length-1];

创建元素
   document.createElement('标签名')  什么标签都能创建  
你创建出来的标签,跟html中手写的标签一模一样,没有任何区别。

添加元素
    父级.appendChild(新创建的对象);
在父级的最后面添加了一个元素
    父级.insertBefore(要插入的元素,插入到谁之前);
把一个元素插入到另一个元素之前
 **必须有一条才能用  必须有插入谁之前的元素

删除元素
 父级.removeChild(要删除的对象)

克隆元素
obj.cloneNode()
obj.cloneNode(true) 深度克隆元素,包括内容一起克隆
*注意:id也会被一起克隆。
*小贴士:以后每次使用克隆的时候都要把id去掉

上移下移:
appendChild和insertBefore有剪切功能   
    
盒子模型:width/height+padding*2+border*2
物体信息:   
obj.offsetWidth   盒子模型的宽度
obj.offsetHeight  盒子模型的高度
obj.offsetTop     距离定位父级的距离
offsetHeight                            Height
盒子模型高度                          纯高度
 number                                 string 

获取html标签
右下角富媒体:
    1.position:absolute; right:0; bottom:0;
    2.position:fixed; right:0; bottom:0; 不兼容ie6
自己写:
onscroll  当页面滚动时触发。
    滚动距离(页面滚了多少它就是多少)
         document.documentElement.scrollTop;
    不兼容chrome
         document.body.scrollTop;
    兼容chrome
兼容写法:
document.documentElement.scrollTop||document.body.scrollTop;

改变窗口大小事件  onresize      
页面滚动事件    onscroll

滚动距离
    document.documentElement.scrollTop||document.body.scrollTop; 获取上下滚动距离
    document.documentElement.scrollLeft||document.body.scrollLeft; 获取左右滚动距离
获取可视区的宽高
    document.documentElement.clientHeight
获取可视区高度
    document.documentElement.clientWidth
onfocus:
事件,获取焦点的事件
onblur:
事件,失去焦点的事件

DOM操作(二)

结构:parentNode    document      结构父级
定位:offsetParent  body          定位父级
**offsetLeft 物体到有定位父级的一个左边距离
obj.getBoundingClientRect(); 获取绝对位置;
    .left 左边距离页面左边的距离
    .top  上边距离页面上边的距离
    .right  右边距离页面左边的距离
    .bottom  下边距离页面上边的距离

操作属性
正常和自定义的都行
获取自定义属性
     obj.getAttribute('属性名'); 
设置自定义属性
     obj.setAttribute('属性名','属性值');
删除自定义属性
     obj.removeAttribute(名)
     成对出现   不能和自定义属性混用

物体高度:
obj.offsetHeight    物体盒子模型高度
obj.scrollHeight    内容高度
如果内容小于offsetHeight,取得offsetHeight
如果内容大于offsetHeight,内容高度

innerHTML的问题:
        innerHTML加等于的话:会清空之前身上事件
图片对象:
   new Fuction()
   new Oject()
   new Image()  创建一个图片对象
   这个东西跟在html中手写的img标签一模一样。
   img.onload   当图片加载成功触发这个事件。
   img.onerror  当图片加载失败触发这个事件。

文字提示:
   事件
       获取焦点事件
           onfocus
       失去焦点事件
           onblur
获取焦点函数
让一个文本框上来就获取焦点
    .focus() 让一个元素获取焦点
    .blur()  让一个元素失去焦点
    
事件对象(event) 包含了事件的详细信息。
    ev参数        事件对象    兼容chrome FF IE8 9 10 但是得传参
    event       事件对象    兼容Chrome和IE系列
    var oEvent = ev||event;(他们俩个不能换位置)  
    平时注意写上window.onload 
    只能获取到鼠标和键盘的操作。

获取鼠标在可视区中的坐标:
    事件对象.clientX;       获取可视区中X轴坐标
    事件对象.clientY;       获取可视区中Y轴坐标
**以后只要是操作clientX和clientY就加上滚动距离。
ondblclick          双击事件。
onmousemove         鼠标移动事件
        注意:移动事件触发的特别频繁。所以里面别放复杂代码。

事件冒泡:
   子级会去找父级相同的事件执行 
   就算当前元素没什么没有这个事件 也会往上冒 
   冒泡跟结构有关  (没事不要取消)
取消事件冒泡:
   var oEvent=ev||event; 
   oEvent.cancelBubble=true     取消事件冒泡.  IE chrome照顾IE
   oEvent.stopPropagation();   取消事件冒泡.  W3C规定

Jq的元素操作及DOM操作

Jq的元素操作

$  -  jQuery库  jQuery()
jQuery中所有的东西,都在 $ 身上。

domReady:
$(function(){
    
});
另一种写法:
$(document).ready(function(){
    
});

获取元素:
根据id:      $('#id')
根据class:  $('.class')
根据标签名: $('标签名')

加事件:
$('#id').click(fucntion(){});       
用 $ 获取到的元素,都是 jquery的对象,不是原生的对象。

设置样式:
$('div').css('background','red')
获取样式:
$('div').css('display');

设置显示、隐藏:
显示: .show();
隐藏: .hide();

toggle:绑定两个或多个事件处理器函数,以响应被选元素的轮流的 click 事件
    
鼠标移入:
mouseenter  mouseover
鼠标移出:
mouseleave  mouseout
移入移出切换 :
$('#btn').hover(function(){}, function(){});
两个函数,分别表示移入和移出(第一个函数->移入,第二个函数->移出)
    
淡入淡出:
$('#div1').fadeIn();
$('#div1').fadeOut();

*jquery里,涉及动画的东西,先停止,再继续
$('#div1').stop().fadeIn();

*调用jquery的方法时,可以采用 链式  写法。
$('#div1').stop().fadeIn();
替换了:
    $('#div1').stop();
            $('#div1').fadeIn();
下拉:slideDown
收起:slideUp

自定义动画效果,animate  先加上stop()
animate(params,[speed],[easing],[fn])
params:一组包含作为动画属性和终值的样式属性和及其值的集合
speed:三种预定速度之一的字符串("slow","normal", or "fast")或
        表示动画时长的毫秒数值(如:1000)
easing:要使用的擦除效果的名称(需要插件支持).默认jQuery提供"linear" 和 "swing"
fn:在动画完成时执行的函数,每个元素执行一次。
Params的属性值必须是数字 不是数字没办法运动
改变颜色:https://bitstorm.org/jquery/color-animation/jquery.animate-colors.js

选择器:获取元素    
常用三种:
id:     $('#id')
标签:  $('标签名')
class: $('.class名字')

属性:
$('li[属性名="属性值"]')

伪类:
:first    第一个
:last     最后一个
:even     偶数行
:odd      奇数行
:eq(索引值)  按索引取第几个 -- 从0开始
:lt 小于索引值
:gt 大于索引值
:contains(text)  找内容中包含
li:has(标签名)  标签名是li下的 选中的是li
$('#box input')  嵌套选择
       **** .eq(索引值)    获取指定索引值的元素 

css的操作:
获取:   .css('样式名');  
设置:   .css('样式名','值');
批量设置:.css({多个样式名和值});

属性操作:
获取属性:     .attr('属性名');
设置属性:     .attr('属性名','值');
批量设置属性: .attr({多个属性名和值});

class的操作:
    增:  addClass('class名');
    删:  removeClass('class名');

内容的操作:
表单元素的内容:
    原生: .value
    jq:  
        获取:.val()
        设置:.val('设置的值');
标签的内容:
    原生: innerHTML
    jq:
        获取: .html()
        设置: .html('设置的内容');
对象:
   原生对象,不能用jq的方法的操作
   jq对象,不能用原生的方法操作

把jq对象转成原生对象:  $('div')[0]
把原生对象转成jq对象:  $(oDiv)
     jquey里,this,通常情况下(在多数情况下),指的是原生对象(不是jq对象)。
     ***链式操作

获取索引值: .index()

Jq的DOM操作:

位置:
    原生:
        到定位父级:
            oDiv.offsetLeft
            oDiv.offsetTop
        绝对位置:
            getPos(oDiv).left
            getPos(oDiv).top
    jquery:
        到定位父级:
            $(this).position().left 
            $(this).position().top
        绝对位置:
            $(this).offset().left
            $(this).offset().top
大小:
    原生:
        盒模型:
            offsetWidth
            offsetHeight
    jquery:
        普通宽:$(this).width()  //普通,不包含border和 padding
        普通高:$(this).height()

        $(this).innerWidth() //包含 普通+ padding
        $(this).innerHeight() 

        $(this).outerWidth() //包含普通+ padding+ border
        $(this).outerHeight()  
可视区大小:
宽:$(window).width()
高:$(window).height()
滚动条:
    原生 :  
        document.documentElement.scrollTop || document.body.scrollTop;
    jquery:
        $(document).scrollTop()
        $(document).scrollLeft();

兄弟们:
$(this).siblings() ;
DOM操作:
创建元素: $('<p>fffff</p>')

append:
    A.append(B);     // 在A里面追加B (后面)
appendTo:
    A.appendTo(B);   //把A放到B里面(后面)
prepend:
    A.prepend(B);  // 在A里面追加B (前面)
prependTo:
    A.prependTo(B);  //把A放到B里面(前面)
after:
    A.after(B);        //把B放到A后面 (外面)
before:
    A.before(B);       //把B放到A前面 (外面)
insertAfter:
    A.insertAfter(B);   //把A放到B后面 (外面)
insertBefore:
    A.insertBefore(B);  //把A放到B前面(外面)

删除元素:
remove:
    $('选中的元素').remove('id/css/tag/嵌套/...');

jq事件:

在jquery里,所有的事件,都是绑定的。
绑定,解绑,委托:
    -------------------------------------
    1.7 开始,下面的方式,都弃用
        bind()      unbind()   直接绑定
        live()      die()      通过冒泡
        delegate    undelegate 更精确的小范围使用事件委托
    --------------------------------------

绑定:  on
   简单绑定: $(obj).on('事件名',function(){});
   传递数据: $(obj).on('事件名','选择器',{数据},function(ev){
                     ev.data // 就是传过来的数据
            });
   多个事件:  $(obj).on('事件名1 事件名2...',function(){});
                       ***多个事件用空格分开

解绑定: off
   $(obj).off();  //全部事件都消失了
   $(obj).off('事件名');  //指定的事件消失

委托: on
   $(obj).on('事件名','选择器',function(ev){
            **函数里面的this是选择器(可以是jq任何选择器)
           //var aaa=ev.target||ev.srcElement
           //**$(aaa)转成jq对象 才能操作
   });


one:
    $(obj).one('事件名',function(){});  一次性事件
  模拟:
    $(obj).on('事件名',function(){
            alert(123)
            $(obj).off();
        
    })

右键:
contextmenu

return false:
   阻止默认行为 并且 阻止冒泡

单独阻止默认行为:ev.preventDefault()
单独阻止冒泡:ev.stopPropagation()

*jquery里的事件详情 ev ,做了兼容处理,不用 ev||event

循环:两种写法
   $('li').each(function(index,element){
       //index --  i
       //element  --  aLi[i]
       element  原生对象
       $(element) jq 对象
  })
   $.each(要循环的东西,function(i,v){
       //要循环的东西 可以是原生对象
   });

小工具:
   $.browser.msie  是否是ie  false/true
   $.trim(str)      去除首尾空格
   $.type       测试类型

jquery:
    js 库

为什么流行:
    1)本身确实有很多封装好的功能
    2)可扩展性非常强
        ---导致很多jquery插件出现了

自定义插件:
    $.fn.toRed = function(){
        //实现插件的代码
        在插件里,this  就 jquery对象。
    }

批量写插件:
    $.fn.extend({
        toRed:function(){
            this.css('','')
        },
        toBlue:function(){
            this.css('','')
        }
    });
//可以单独放在js文件里面
***注意自定义插件放在window.onload($()) 外面
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,692评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,482评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,995评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,223评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,245评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,208评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,091评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,929评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,346评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,570评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,739评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,437评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,037评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,677评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,833评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,760评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,647评论 2 354

推荐阅读更多精彩内容