jQuery DOM篇

http://www.imooc.com/static/lib/jquery/1.9.1/jquery.js

js中如何创建html节点和属性

创建流程:

1、创建节点:document.createElement();

2、添加节点的属性:setAttribute

3、把节点加入到文档中

涉及到的方法:

document.createElement(); 创建元素

setAttribute()    设置属性和属性值

innerHTML    给节点添加文本

appendChild()    加入文档

document.querySelector('body'); // 获取文档中第一个body元素

jQuery节点创建与属性的处理

创建元素节点

$("html结构")

例子:$("");

创建文本节点

例子:$("

我是文本节点

");

创建属性节点

$("

我是文本节点

");

DOM内部插入append()与appendTo()父子关系处理,在结尾插入

动态创建的元素是不够的,它只是临时存放在内存中,最终我们需要放到页面文档并呈现出来。

所以jq定义了2个方法将元素当作某一个元素的子元素插入到文档中

append(content)向每个匹配的元素追加内容

append()前面是被插入的对象,后面是要在对象内插入的元素内容

A.append(B)   把B插入到A中

appendTo(content)

A.appendTo(B)   把A插入到B中

appendTo()前面是要插入的元素内容,而后面是被插入的对象

DOM外部插入after()与before()兄弟关系处理

.after(content)      在匹配元素集合中的每个元素后面插入指定内容,作为兄弟节点

例子:

$be.before('

测试before,前面

'); 在be元素前面,插入p标签

.before(content)在匹配元素集合中的每个元素前面插入指定内容,作为兄弟节点

$af.after('

测试after,后面

'); 在af元素后面,插入p标签

备注:

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

2、2个方法都是都可以接收HTML字符串,DOM 元素,元素数组,或者jQuery对象,用来插入到集合中每个匹配元素的前面或者后面

3、2个方法都支持多个参数传递after(div1,div2,....) 可以参考右边案例代码

DOM内部插入prepend()与prependTo()  父子关系,在被选元素前面插入

.prepend(content)    将指定元素插入到匹配元素里面作为它的第一个子元素 (如果要作为最后一个子元素插入用.append()).

例子:

$(".aaron1").prepend("

测试prepend333

"); // 在.aaron1的元素内部插入元素,作为第一个直接子元素

.prependTo(被选元素)    正好相反,将要被插入的内容写在方法的前面,可以是选择器表达式或动态创建的标记,待插入内容的容器作为参数。同.appendTo()

$("

测试prependTo444

").prependTo($(".aaron2")); // 把内容插入到.aaron2元素中,作为第一个子元素

以下都是父子关系,父元素和直接子元素

append()向每个匹配的元素内部追加内容

prepend()向每个匹配的元素内部前置内容

appendTo()把所有匹配的元素追加到另一个指定元素的集合中

prependTo()把所有匹配的元素前置到另一个指定的元素集合中

DOM外部插入insertAfter()与insertBefore()

.insertBefore(content)  //在目标元素前面插入集合中每个匹配的元素

例子:

$("

测试insertBefore

").insertBefore($(".test1")); //将前面元素插入到.test1中,作为兄弟元素

.insertAfter(content)     //在目标元素后面插入集合中每个匹配的元素

$("

测试afterBefore

").insertAfter($(".test2")); // 将前面元素插入到.test2中,作为兄弟元素

.before()和.insertBefore()实现同样的功能。主要的区别是语法——内容和目标的位置。 对于before()选择表达式在函数前面,内容作为参数,而.insertBefore()刚好相反,内容在方法前面,它将被放在参数里元素的前面

.after()和.insertAfter() 实现同样的功能。主要的不同是语法——特别是(插入)内容和目标的位置。 对于after()选择表达式在函数的前面,参数是将要插入的内容。对于 .insertAfter(), 刚好相反,内容在方法前面,它将被放在参数里元素的后面

.before、after与insertBefore。insertAfter的除了目标与位置的不同外,后面的不支持多参数处理

DOM节点删除之empty()的基本用法

.empty()  移除指定元素当子节点,,但是不移除自身元素

例子: $("#test").empty()   移除#test元素下的所有子元素,包括后代元素,但是并不会删除#test这个元素本身

DOM节点删除之remove()的有参用法和无参用法

.remove(无参数) //删除该指定元素和指定元素下的所有后代元素

.remove(有参数)  //可以传递一个选择器表达式用来过滤将被移除的匹配元素集合,可以选择性的删除指定的节点

例子: $("p").remove("p:contains('3')");   // 删除p元素,以及p元素内部所有的元素除了包含文本3的元素,其他所有删除

empty方法

严格地讲,empty()方法并不是删除节点,而是清空节点,它能清空元素中的所有后代节点

empty不能删除自己本身这个节点

remove方法

该节点与该节点所包含的所有后代节点将同时被删除

提供传递一个筛选的表达式,删除指定合集中的元素

DOM节点删除之保留数据的删除操作detach()

3个删除方法

empty():清空匹配的元素集合中所有的子节点,自身节点和事件都未被删除。

remove():这个方法不会把匹配的元素从jQuery对象中删除,因而可以在将来再使用这些匹配的元素。但除了这个元素本身得以保留之外,其他的比如绑定的事件,附加的数据等都会被移除。

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

绑定事件等数据不会删除,会存储在内存中

$("div").detach()  删除div以及div下的所有元素,不删除事件和数据,返回div对象

$("div").empty()  清空div下的所有元素,不删除事件,返回div对象

$("div").remove()  删除div以及div下的所有元素,删除事件和数据,返回div对象

备注:删除事件和数据的依据就是是否在内存中,在内存中,就是事件没有被删除/不在内存中,就是被删除

什么意思呢?

比如说p.remove()  p的自身点击事件不在保留,点击p没有任何反应

p.detach() p的自身点击事件还保留,可以点击p进行事件处理

DOM拷贝clone()

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

如果要复制匹配元素的事件和数据,需要指定一个参数true,默认是false,不克隆事件和数据

HTML部分

JavaScript部分

$("div").on('click', function() {//执行操作})

//clone处理一

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

//clone处理二

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

.clone()方法是jQuery扩展的,只能处理通过jQuery绑定的事件与数据

元素数据(data)内对象和数组不会被复制,将继续被克隆元素和原始元素共享。深复制的所有数据,需要手动复制每一个。

var$p1=$("p:first").clone(); //克隆出来的p元素没有点击事件,浅拷贝

var$p2=$("p:last").clone(true); // 克隆出来的p元素有点击事件,深拷贝

DOM替换replaceWith()和replaceAll()

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

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

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

.replaceWith()与.replaceAll() 方法会删除与节点相关联的所有数据和事件处理程序

.replaceWith()方法,和大部分其他jQuery方法一样,返回jQuery对象,所以可以和其他方法链接使用

.replaceWith()方法返回的jQuery对象引用的是替换前的节点,而不是通过replaceWith/replaceAll方法替换后的节点

$p1.replaceWith("

replaceWith替换

"); //用后面的内容替换$p1元素

$("

replaceAll替换

").replaceAll($p2); // 用前面的内容替换后面的$p2元素

DOM包裹wrap()方法

.wrap(包裹的元素) //在所选择元素的外边包含一个父元素

$(this).wrap("

") // 给$this对象外面包裹一个父元素div

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

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

$(this).wrap(function(){

return"

"; // 给$this对象外面包裹一个父元素div

})

备注:.wrap()函数可以接受任何字符串或对象,可以传递给$()工厂函数来指定一个DOM结构。这种结构可以嵌套了好几层深,但应该只包含一个核心的元素。每个匹配的元素都会被这种结构包裹。该方法返回原始的元素集,以便之后使用链式方法。be额

DOM包裹unwrap()方法

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

$("p").unwrap(); // 清楚p元素的直接父元素,不是所有祖先元素

DOM包裹wrapAll()方法

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

$('p').wrapAll('

')  // 给所有的p元素都加了一个div父元素

结果:

p元素

p元素

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

$('p').wrapAll(function() {

return '

';

})

用wrap也可以给所有p元素增加div,但不是同一个div(有多少个p就加了多少个div)。而wrapALL能给所有p元素增加一个共同的div

请注意:$(this)只给当前对象加,不遍历所有的

$("p").wrapAll("

"); 给所有的p元素套同1个div作为父元素

$(this).wrapAll("

"); 给当前p元素套同1个div作为父元素

$("p").wrap("

");  给所有的p元素套上不同的div作为父元素

$(this).wrap("

"); 给当前的p元素套上div作为父元素

DOM包裹wrapInner()方法

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

$("div").wrapInner("

新的p元素

")  // 给div元素下所有的元素增加一个包裹层p元素,p是div的唯一直接子元素

$("div").wrapInner(function(){

return"

通过function添加

";  // 给div元素下所有元素增加一个包裹层p元素

})

jQuery遍历之children()方法

.children() 查找被选择元素的所有直接子元素

$("div").children(); // 查找div元素下的所有直接子元素

$("div").children("a"); // 查找div元素下所有是a的直接子元素

jQuery遍历之find()方法

.children()是父子关系查找,.find()是后代关系(包含父子关系)

.find("*")找到所匹配元素中的所有后代元素

重要:参数不能为空

$("div").find("*"); // 查找到所有div元素下到所有后代元素

$("div").find("span"); // 查找到所有div元素下到是span到后代元素

find是遍历当前元素集合中每个元素的后代。只要符合,不管是儿子辈,孙子辈都可以。

与其他的树遍历方法不同,选择器表达式对于 .find() 是必需的参数。如果我们需要实现对所有后代元素的取回,可以传递通配选择器 '*'。

find只在后代中遍历,不包括自己。

选择器 context 是由 .find() 方法实现的;因此,$('.item-ii').find('li') 等价于 $('li', '.item-ii')(找到类名为item-ii的标签下的li标签)。

jQuery遍历之parent()方法

.parent() 方法  // 查找选择元素的直接父元素

例子:

$(".level-3").parent() // 筛选出.level-3所对应的元素的父亲元素

jQuery是一个合集对象,所以通过parent是匹配合集中每一个元素的父元素

例子:加了一个选择器,以便来进行筛选

$('.item-a').parent(':last') // 筛选出 .item-a所对应的元素父元素的最后一个父元素

.parents() 方法找到选定元素的祖先元素

jQuery遍历之closest()方法

closest()方法接受一个匹配元素的选择器字符串,所以必须要有一个参数(选择器字符串)

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

例子:

$("div").closet("li')  // 查找div元素上方的所有li元素

jQuery是一个合集对象,所以通过closest是匹配合集中每一个元素的祖先元素

parents() 和closest() 方法的区别

起始位置不同:.closest开始于当前元素 .parents开始于父元素

遍历的目标不同:.closest要找到指定的目标,.parents遍历到文档根元素,closest向上查找,直到找到一个匹配的就停止查找,parents一直查找到根元素,并将匹配的元素加入集合

结果不同:.closest返回的是包含零个或一个元素的jquery对象,parents返回的是包含零个或一个或多个元素的jquery对象

jQuery遍历之next()方法 (紧跟着的兄弟元素)

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

next()无参数允许我们找遍元素集合中紧跟着这些元素的直接兄弟元素,并根据匹配的元素创建一个新的 jQuery 对象。

next(选择器) 有参数

例子:$('.item-2').next(':first')   // 找到.item-2中的兄弟元素然后筛选出第一个li,加上蓝色的边

jQuery遍历之prev()方法 (前面紧跟的兄弟元素)

.prev() // 无参数   选择该元素前面的兄弟元素集合

.prev(选择器) // 有参数 ,选择该元素前面兄弟元素中指定的兄弟元素

$('.item-3').prev(':last')  找到所有class=item-2的li,然后筛选出最后一个,加上蓝色的边

重要:上面例子表示找到item-3前面的相邻元素集合,再找这些元素中的最后一个

jQuery遍历之siblings()

.siblings(无参数)取得一个包含匹配的元素集合中每一个元素的同辈元素的元素集合

例子:$(".item-2").siblings()      // 表示找到.item-2的所有同辈元素

.sibling(选择器) 筛选出同辈元素

例子:$('.item-2').siblings(':last')  // 找到.item-2的所有同辈元素中的最后一个元素

jQuery遍历之add()方法

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

该方法表示往被选择的元素中插入一行新的元素

例子:$('li').add('p')  // 表示把p元素插入到$("li")中

jQuery遍历之each()

each是一个for循环的包装迭代器

each通过回调的方式处理,并且会有2个固定的实参,索引与元素

each回调方法中的this指向当前迭代的dom元素

$("li").each(function(index, element) {

index 索引 0,1

element是对应的li节点 li,li

this 指向的是li

})

你可能感兴趣的:(jQuery DOM篇)