jQuery基础——DOM篇

jQuery基础——DOM篇

在javascript中如何创建节点?

  1. 创建节点(常见的:元素、属性和文本)
  2. 添加节点的一些属性
  3. 加入到文档中

流程中涉及的一点方法:

  • 创建元素:document.createElement
  • 设置属性:setAttribute
  • 添加文本:innerHTML
  • 加入文档:appendChild

例子:

    document.addEventListener(‘click‘,function(){

        //创建2个div元素
        var rightdiv = document.createElement(‘div‘)
        var rightaaron = document.createElement("div");

        //给2个div设置不同的属性
        rightdiv.setAttribute(‘class‘, ‘right‘)
        rightaaron.className = ‘aaron‘
        rightaaron.innerHTML = "动态创建DIV元素节点";

        //2个div合并成包含关系
        rightdiv.appendChild(rightaaron)

        //绘制到页面body
        body.appendChild(rightdiv)

    },false)

而通过jQuery却很方便:

$body.on(‘click‘, function() {
    //通过jQuery生成div元素节点
    var div = $("<div class=‘right‘><div class=‘aaron‘>动态创建DIV元素节点</div></div>")
    $body.append(div)
})

DOM节点的插入

内部插入append()与appendTo()

$(".content").append(‘<div class="append">通过append方法添加的元素</div>‘)
$(‘<div class="appendTo">通过appendTo方法添加的元素</div>‘).appendTo($(".content"))

外部插入after()与before()

选择器 描述
.after( content ) 在匹配元素集合中的每个元素后面插入参数所指定的内容,作为其兄弟节点
.before( content ) 据参数设定,在匹配元素的前面插入内容

before与after都是用来对相对选中元素外部增加相邻的兄弟节点

注意点:

  • after向元素的后边添加html代码,如果元素后面有元素了,那将后面的元素后移,然后将html代码插入
  • before向元素的前边添加html代码,如果元素前面有元素了,那将前面的元素前移,然后将html代码插

内部插入prepend()与prependTo()

选择器 描述
prepend 向每个匹配的元素内部前置内容
prependTo 把所有匹配的元素前置到另一个指定的元素集合中

外部插入insertAfter()与insertBefore()

选择器 描述
insertBefore 在目标元素前面插入集合中每个匹配的元素
insertAfter 在目标元素后面插入集合中每个匹配的元素

before()选择表达式在函数前面,内容作为参数,而.insertBefore()刚好相反,内容在方法前面,它将被放在参数里元素的前面

    //在test1元素前后插入集合中每个匹配的元素
    //不支持多参数
    $(‘<p style="color:red">测试insertBefore方法增加</p>‘, ‘<p style="color:red">多参数</p>‘).insertBefore($(".test1"))

DOM节点的删除

empty()的基本用法

empty()移除指定元素中的所有子节点。

remove()的有参用法和无参用法

remove()会将元素自身移除,同时也会移除元素内部的一切,包括绑定的事件及与该元素相关的jQuery数据。

remove表达式参数

remove比empty好用的地方就是可以传递一个选择器表达式用来过滤将被移除的匹配元素集合,可以选择性的删除指定的节点

$("button:last").on(‘click‘, function() {
    //找到所有p元素中,包含了3的元素
    //这个也是一个过滤器的处理
    $("p").remove(":contains(‘3‘)")
})

保留数据的删除操作detach()

detach()这个方法不会把匹配的元素从jQuery对象中删除,因而可以在将来再使用这些匹配的元素。与remove()不同的是,所有绑定的事件、附加的数据等都会保留下来。

$("div").detach()这一句会移除对象,仅仅是显示效果没有了。但是内存中还是存在的。当你append之后,又重新回到了文档流中。就又显示出来了。

var p;
$("#bt1").click(function() {
    if (!$("p").length) return; //去重
    //通过detach方法删除元素
    //只是页面不可见,但是这个节点还是保存在内存中
    //数据与事件都不会丢失
    p = $("p").detach()
});

$("#bt2").click(function() {
    //把p元素在添加到页面中
    //事件还是存在
    $("body").append(p);
});

DOM节点的复制与替换

DOM拷贝clone()

.clone()方法深度 复制所有匹配的元素集合,包括所有匹配元素、匹配元素的下级元素、文字节点。

clone方法比较简单就是克隆节点,但是需要注意,如果节点有事件或者数据之类的其他处理,我们需要通过clone(ture)传递一个布尔值ture用来指定,这样不仅仅只是克隆单纯的节点结构,还要把附带的事件与数据给一并克隆了

HTML部分

<div></div>

JavaScript部分
$("div").on(‘click‘, function() {//执行操作})

//clone处理一
$("div").clone()   //只克隆了结构,事件丢失

//clone处理二
$("div").clone(true) //结构、事件与数据都克隆

克隆节点和克隆事件

<script type="text/javascript">
    //克隆节点
    //克隆事件
    $(".aaron2").on(‘click‘, function() {
        console.log(1)
        $(".left").append( $(this).clone(true).css(‘color‘,‘blue‘) )
    })
</script>

DOM替换replaceWith()和replaceAll()

.replaceWith( newContent ):用提供的内容替换集合中所有匹配的元素并且返回被删除元素的集合

$(".bt1").on(‘click‘, function() {
    //找到内容为第二段的p元素
    //通过replaceWith删除并替换这个节点
    $(".right > div:first p:eq(1)").replaceWith(‘<a style="color:red">replaceWith替换第二段的内容</a>‘)
})

.replaceAll( target ) :用集合的匹配元素替换每个目标元素

$(".bt2").on(‘click‘, function() {
    $(‘<a style="color:red">replaceAll替换第六段的内容</a>‘).replaceAll(‘.right > div:last p:last‘);
})

.replaceAll().replaceWith()功能类似,主要是目标和源的位置区别

DOM包裹wrap()方法

.wrap( wrappingElement ):在集合中匹配的每个元素周围包裹一个HTML结构

$(‘p‘).wrap(‘<div></div>‘)

.wrap( function ) :一个回调函数,返回用于包裹匹配元素的 HTML 内容或 jQuery 对象

使用后的效果与直接传递参数是一样,只不过可以把代码写带函数体内部,写法不同而已

$(‘p‘).wrap(function() {
    return ‘<div><div/>‘;   //与第一种类似,只是写法不一样
})

DOM包裹unwrap()方法

将匹配元素集合的父级元素删除,保留自身(和兄弟元素,如果存在)在原来的位置。

$(‘p‘).unwarp();

DOM包裹wrapAll()方法

wrap是针对单个dom元素处理,如果要将集合中的元素用其他元素包裹起来,也就是给他们增加一个父元素,针对这样的处理,JQuery提供了一个wrapAll方法

.wrapAll( wrappingElement ):给集合中匹配的元素增加一个外面包裹HTML结构

简单的看一段代码:

<p>p元素</p>
<p>p元素</p>

给所有p元素增加一个div包裹

$(‘p‘).wrapAll(‘<div></div>‘)

最后的结构,2个P元素都增加了一个父div的结构

<div>
    <p>p元素</p>
    <p>p元素</p>
</div>

.wrapAll( function ) :一个回调函数,返回用于包裹匹配元素的 HTML 内容或 jQuery 对象

通过回调的方式可以单独处理每一个元素

以上面案例为例,

$(‘p‘).wrapAll(function() {
    return ‘<div><div/>‘;
})

以上的写法的结果如下,等同于warp的处理了

<div>
    <p>p元素</p>
</div>
<div>
    <p>p元素</p>
</div>

DOM包裹wrapInner()方法

如果要将合集中的元素内部所有的子元素用其他元素包裹起来,并当作指定元素的子元素,针对这样的处理,JQuery提供了一个wrapInner方法

.wrapInner( wrappingElement ):给集合中匹配的元素的内部,增加包裹的HTML结构

听起来有点绕,可以用个简单的例子描述下,简单的看一段代码:

<p>p元素</p>
<p>p元素</p>

给所有p元素增加一个div包裹

$(‘p‘).wrapInner(‘<div></div>‘)

最后的结构,匹配的p元素的内部元素被div给包裹了

<p>
    <div>p元素</div>
</p>
<p>
    <div>p元素</div>
</p>

.wrapInner( function ) :允许我们用一个callback函数做参数,每次遇到匹配元素时,该函数被执行,返回一个DOM元素,jQuery对象,或者HTML片段,用来包住匹配元素的内容

以上面案例为例,

$(‘p‘).wrapInner(function() {
    return ‘<div><div/>‘;
})

以上的写法的结果如下,等同于第一种处理了

<div>
    <p>p元素</p>
</div>
<div>
    <p>p元素</p>
</div>

jQuery遍历

children()方法

如果想快速查找合集里面的第一级子元素,此时可以用children()方法。这里需要注意:.children(selector) 方法是返回匹配元素集合中每个元素的所有子元素(仅儿子辈,这里可以理解为就是父亲-儿子的关系

$("#bt1").click(function() {
    $(‘.div‘).children().css(‘border‘, ‘1px solid red‘);
})

find()方法

如果想快速查找DOM树中的这些元素的后代元素,此时可以用find()方法,这也是开发使用频率很高的方法。这里要注意 children与find方法的区别,children是父子关系查找,find是后代关系(包含父子关系)

.find()方法要注意的知识点

  • find是遍历当前元素集合中每个元素的后代。只要符合,不管是儿子辈,孙子辈都可以。
  • 与其他的树遍历方法不同,选择器表达式对于 .find() 是必需的参数。如果我们需要实现对所有后代元素的取回,可以传递通配选择器 ‘*’。
  • find只在后代中遍历,不包括自己。
  • 选择器 context 是由 .find() 方法实现的;因此,$(‘li.item-ii‘).find(‘li‘) 等价于 $(‘li‘, ‘li.item-ii‘)
    <script type="text/javascript">
    $("button:last").click(function() {
        //找到所有p元素,然后筛选出子元素是span标签的节点
        //改变其字体颜色
        var $spans = $(‘span‘);
        $("p").find($spans).css(‘color‘, ‘red‘);
    })
    </script>
    

parent()方法

如果想快速查找合集里面的每一个元素的父元素(这里可以理解为就是父亲-儿子的关系),此时可以用parent()方法

因为是父元素,这个方法只会向上查找一级

<script type="text/javascript">
$("button:last").click(function() {
    //找到所有class=item-a的父元素
    //然后给每个ul,然后筛选出最后一个,加上蓝色的边
   $(‘.item-a‘).parent(‘:last‘).css(‘border‘, ‘1px solid blue‘)
})
</script>

parents()方法

parent只会查找一级,parents则会往上一直查到查找到祖先节点

1 .parents().parent()方法是相似的,但后者只是进行了一个单级的DOM树查找

2 $( "html" ).parent()方法返回一个包含document的集合,而$( "html" ).parents()返回一个空集合。

closest()方法

closest()方法接受一个匹配元素的选择器字符串

从元素本身开始,在DOM 树上逐级向上级元素匹配,并返回最先匹配的祖先元素

例如:在div元素中,往上查找所有的li元素,可以这样表达

$("div").closet("li‘)

next()方法

快速查找指定元素集合中每一个元素紧邻的后面同辈元素的元素集合,此时可以用next()方法

理解节点查找关系

如下class=”item-1”元素就是红色部分,那蓝色的class=”tem-2”就是它的兄弟元素

<ul class="level-3">
    <li class="item-1">1</li>
    <li class="item-2">2</li>
    <li class="item-3">3</li>
</ul>

prev()方法

快速查找指定元素集合中每一个元素紧邻的前面同辈元素的元素集合,此时可以用prev()方法

siblings()

快速查找指定元集合中每一个元素紧邻的前面后面同辈元素,此时可以用siblings()方法

理解节点查找关系

如下蓝色的class=”tem-2”的li元素,红色的节点就是它的siblings兄弟节点

<ul class="level-3">
    <li class="item-1">1</li>
    <li class="item-2">2</li>
    <li class="item-3">3</li>
</ul>

add()方法

jQuery是一个合集对象,通过$()方法找到指定的元素合集后可以进行一系列的操作。$()之后就意味着这个合集对象已经是确定的,如果后期需要再往这个合集中添加一新的元素要如何处理?jQuery为此提供add方法,用来创建一个新的jQuery对象 ,元素添加到匹配的元素集合中

.add()的参数可以几乎接受任何的$(),包括一个jQuery选择器表达式,DOM元素,或HTML片段引用。

简单的看一个案例:

操作:选择所有的li元素,之后需要把p元素也加入到li的合集中

<ul>
    <li>list item 1</li>
    <li>list item 3</li>
</ul>
<p>新的p元素</p>

处理一:传递选择器

$(‘li‘).add(‘p‘)

处理二:传递dom元素

$(‘li‘).add(document.getElementsByTagName(‘p‘)[0])

还有一种方式,就是动态创建P标签加入到合集,然后插入到指定的位置,但是这样就改变元素的本身的排列了

 $(‘li‘).add(‘<p>新的p元素</p>‘).appendTo(目标位置)

each()

jQuery是一个合集对象,通过$()方法找到指定的元素合集后可以进行一系列的操作。比如我们操作$("li").css(‘‘) 给所有的li设置style值,因为jQuery是一个合集对象,所以css方法内部就必须封装一个遍历的方法,被称为隐式迭代的过程。要一个一个给合集中每一个li设置颜色,这里方法就是each

.each() 方法就是一个for循环的迭代器,它会迭代jQuery对象合集中的每一个DOM元素。每次回调函数执行时,会传递当前循环次数作为参数(从0开始计数

所以大体上了解3个重点:

each是一个for循环的包装迭代器
each通过回调的方式处理,并且会有2个固定的实参,索引与元素
each回调方法中的this指向当前迭代的dom元素

看一个简单的案例

<ul>
    <li>慕课网</li>
    <li>Aaron</li>
</ul>

开始迭代li,循环2次

$("li").each(function(index, element) {
     index 索引 0,1
     element是对应的li节点 li,li
     this 指向的是li
})

这样可以在循环体会做一些逻辑操作了,如果需要提前退出,可以以通过返回 false以便在回调函数内中止循

时间: 2024-10-12 15:08:30

jQuery基础——DOM篇的相关文章

jQuery基础——事件篇

jQuery基础--事件篇 鼠标事件 click与dbclick事件 click方法监听用户单击操作,dbclick监听用户双击操作,这两个方法类似. dbclick与click事件不同的是: click事件触发需要以下几点: click事件其实是由mousedown与mouseup 2个动作构成,所以点击的动作只有在松手后才触发 dblclick事件触发需要以下几点: dblclick又是由2个click叠加而来的,所以dblclick事件只有在满足以下条件的情况下才能被触发 鼠标指针在元素里

jQuery基础——样式篇

jQuery基础--样式篇 jQuery 分 2 个系列版本 1.x 与 2.x,主要的区别 在于 2.x 不再兼容 IE6.7.8 为移动端而优化,由于减少了一些代码,使得该版本比 jQuery 1.x 更小且更快. 如果开发者比较在意老版本 IE 用户,只能使用 jQuery 1.9 及之前的版本了. $(document).ready 的意思是等页面的文档(document)中的节点都加载完毕后,在执行后续的代码,因为我们在执行代码的时候,可能会依赖页面的某一个元素,我们要确保这个元素真正

jQuery基础--样式篇(3)

1.jQuiery对象与DOM对象 对于刚刚接触jQuery的初学者,我们要清楚认识一点:jQuery对象与DOM对象是不一样的.可能一时半会分不清楚哪些是jQuery对象,哪些是DOM对象,下面重点介绍一下jQuery对象,以及两者相互间的转换. 下面举一个简单的例子: <p id="cnblogs"></p> 使用原生的javascript处理:通过原生DOM模型提供的document.getElementById(“snblogs”) 方法获取的DOM元素

jQuery基础DOM

基础DOM由D,document文档页面:O表示对象 ,就是一组含有独立特性的数据结合,M表示模型,就是在页面上的元素节点与文本节点. html()与text()方法 方法名 描述 html() 获取元素中HTML内容 html(value) 设置元素中HTML内容 text() 获取元素中文本内容 text(value) 设置原生中HTML内容 val() 获取表单中的文本内容 val(value) 设置表单中的文本内容 如果设置多个选项的选定状态,比如下拉列表,单选复选框等,可以用数组传递操

jQuery基础DOM和CSS操作

$('#box').html();//获取 html 内容$('#box').text();//获取文本内容,会自动清理 html 标签$('#box').html('<em>www.li.cc</em>');//设置 html 内容$('#box').text('<em>www.li.cc</em>');//设置文本内容,会自动转义 html标签$('#box').html($('#box').html() + '<em>www.li.cc&l

jQuery 基础 DOM 和 CSS操作

设置元素及内容 通过选择器.过滤器来得到我们想要操作的元素.这个时候,我们就可以对这些元素进行 DOM 的操作.那么,最常用的操作就是对元素内容的获取和修改. 在常规的 DOM 元素中,我们可以使用 html()和 text()方法获取内部的数据.html()方法 可以获取或设置 html 内容,text()可以获取或设置文本内容. $('#box').html(); //获取 html 内容 $('#box').text(); //获取文本内容,会自动清理 html 标签 $('#box').

jQuery基础--样式篇(5)

jQuery的属性与样式 (1).attr()与.removeAttr():每个元素都有一个或者多个特性,这些特性的用途就是给出相应元素或者其内容的附加信息. attr()有4个表达式 attr(传入属性名):获取属性的值 attr(属性名, 属性值):设置属性的值 attr(属性名,函数值):设置属性的函数值 attr(attributes):给指定元素设置多个属性值,即:{属性名一: “属性值一” , 属性名二: “属性值二” , … … } removeAttr()删除方法 .remove

jQuery基础--样式篇(4)

jQuery选择器: 1.id选择器:通过id名来获取节点,id是唯一的,每个id在页面上只能使用一次. $( "#id" ) 2.类选择器:通过class样式类名来获取节点 $( ".class" ) 3.元素选择器:根据给定(html)标记名称选择所有的元素 $( "element" ) 4.全选择器:可以选取所有的元素 $( "*" )

JQuery基础DOM操作

DOM创建节点及节点属性 通过JavaScript可以很方便的获取DOM节点,从而进行一系列的DOM操作.但实际上一般开发者都习惯性的先定义好HTML结构,但这样就非常不灵活了. 试想下这样的情况:如果我们通过AJAX获取到数据之后然后才能确定结构的话,这种情况就需要动态的处理节点了 创建流程比较简单,大体如下: 创建节点(常见的:元素.属性和文本) 添加节点的一些属性 加入到文档中 流程中涉及的一点方法: 创建元素:document.createElement 设置属性:setAttribut