jQuery的DOM操作

670 阅读4分钟

创建节点

JavaScript方法

  • var newDiv = document.createElement('div');
  • newDiv.innerText = ' 新建节点';

jQuery方法

  • $('<div>新建节点</div>’);
// JS方法创建节点
var newSpan = document.createElement('span')
newSpan.innerText = '新建节点'

// jQuery方法创建节点
var jq = $('<span>这只是个单纯的span标签</span>') 

添加元素

JavaScript方法

  • var Newp = document.createElement('p');
  • document.body.appendChild(Newp);
// JS方法插入节点
var show = document.querySelector('.show')
show.appendChild(newSpan)

jQuery方法

append方法

语法:jQuery对象.append(参数)

传入一个jQuery对象
<div id="box"></div>
<div></div>
    
<script>
var $span = $("<span>这是一个span元素</span>");
$("#box").append($span);
</script>

<!-- js代码运行完毕的结果 -->
<div id="box">
    <span>这是一个span元素</span>
</div>
<div></div>

如果添加已经存在的元素,会有剪切的效果

<div></div>
<p></p>

<script>
var $p = $('p');
$('div).append($p);
</script>

<!-- js代码运行完毕的结果 -->
<div>
    <p></p>
</div>
传入一个html形式的字符串
<div></div>

<script>
$('div').append('<span>这是一个span元素</span>');
</script>
    
<!-- js代码运行完毕的结果 -->
<div>
    <span>这是一个span元素</span>
</div>
传入一个dom对象

也会有剪切效果

<div></div>
<p id="p"></p>

<script>
var p = document.getElementById('p');
$('div').append(p);
</script>

<!-- js代码运行完毕的结果 -->
<div>
  <p></p> 
</div>

其他跟 append 类似的方法

  • prepend,在前面添加子元素
  • after,放到自己的后面(变为兄弟元素)
  • before,放到自己的前面(变为兄弟元素)

调用html方法

语法:jQuery对象.html('html形式的字符串')

注意:该方法会产生覆盖的效果

<div>
    div里面的文本
	<p></p>
</div>

<script>
$('div').html('<span>这是一段内容</span>');
</script>
    
<!-- js代码运行完毕的结果 -->
<div>
    <span>这是一段内容</span>
</div>

小结:

  • append(jQuery对象/ 'html字符串'/DOM对象) 有剪切效果
  • html('html字符串') 会覆盖以前的内容

html方法的其他作用

html() 不传参数 用于获取内容
//html
<div>
    <p></p>
	<span></span>
	文本
</div>

<script>
$('div').html()
</script>

<!-- js代码运行完毕的结果 -->
<p></p> 
<span></span>
文本
html('') 传入一个空的字符串

不推荐使用,因为子元素的事件没有被清除,会造成内存泄露

语法:jQuery对象.html(''),传递进来一个空的字符串

//html
<div>
    <p></p>
	<span></span>
</div>

<script>
    $('div).html('');
</script>

<!-- js代码运行完毕的结果 -->
<div></div>

清空元素

empty方法

清空指定节点的所有子节点 (推荐使用,会清除子元素上绑定的内容)

语法:jQuery对象.epty()

<div>
    <p></p>
	<span></span>
</div>

<script>
$('div).empty();
</script>

<!-- js代码运行完毕的结果 -->
<div></div>

删除节点

JavaScript方法

  • var b = document.getElementById('test');
  • var c = b.parentNode;
  • c.removeChild(b)

jQuery方法

  • $('#test').remove(),把自己删除掉
  • $('#test').empty(),把自己内部的节点删除掉
  • $('#test').detach(),移除被选元素,包括所有的文本和子节点,返回移除元素的副本
// JS方法删除节点
var b = document.querySelector('.active') // 获取 active 节点
var c = b.parentNode // 查找 active 的父元素
c.removeChild(b) // 让 active 的父元素删除其子元素 active

// jQuery方法删除节点
$('.show').remove() // 删除 show 节点
$('.content').empty() // 删除 content 节点内部所有的节点(清空节点)
var detach = title.detach() // 删除 title 内部所有节点,并将移除的元素的副本返回
console.log(detach[0]); // div#box

替换节点

JavaScript方法

  • parent.replaceChild(newNode, oldNode);

jQuery方法

  • $('<p>替换 </p>').replaceAll('#test1');
// JS方法替换节点
title1.replaceChild(newSpan,oldNode) 
// 将 title1 内部的 oldNode 节点替换成 newSpan

// jQuery方法替换节点
$('<span>选项x</span>').replaceAll('.oldNode1') 
// 将 span节点 替换成与 oldNode1 节点

克隆节点

JavaScript方法

  • var clonep = document.querySelector("p").cloneNode(true);
  • document.body.appendChild(clonep);

jQuery方法

语法:jQuery对象.clone([boolean])

  • 默认值是 false,会复制所有内容,但是不包括事件
// JS复制节点
var btn2 = btn.cloneNode(true) //将 btn 节点进行深复制
document.body.appendChild(btn2) // 在 body 节点中插入需要复制的btn节点

// jQuery方法复制节点——不传参数
<div id="box"></div>
<p>
    <span>span元素</span>
</p>
<script>
var newP = $('p').clone();
$('#box').append(newP);
</script>
    
<!-- js代码运行完毕的结果 -->
<div id="box">
   <p>
     <span>span元素</span>
   </p> 
 </div>
<p>
    <span>span元素</span>
</p>
  • 当参数为 true 时,会克隆所有内容,并且注册的事件也会一起克隆下来,无法克隆原生方式注册的事件
//html
<div id="box"></div>
<p>
    <span>span元素</span>
</p>

<script>
$span = $('span');
$span.on('click', function(){
      console.log('span')
})
var newP = $('p').clone(true);
$('#box').append(newP);
</script>

<!-- js代码运行完毕的结果 -->
<div id="box">
   <p>
     <span>span元素</span> // 点击会打印span
   </p> 
 </div>
<p>
    <span>span元素</span> // 点击会打印span
</p>

其他方法

  • children() ,获得匹配元素集合中每个元素的所有子元素
// 获得匹配元素集合中每个元素的所有子元素
$('.title').children().css('color', 'red') // 获得 title 的子元素,在其子元素上设置css样式
  • next()prev(),获得匹配元素的兄弟元素
// 获得匹配元素的兄弟元素
$('.show').prev().css('color', 'orange') // 获得 show 的上一个兄弟元素
$('.show').next().css('color', 'green') // 获得 show 的下一个兄弟元素
  • parent(),获得当前匹配元素集合中每个元素的父元素
// 获得当前匹配元素集合中每个元素的父元素
$('.oldNode').parent().css('border', '1px solid black') // 获得 oldNode 的父元素
  • closest(parent),当前元素开始,返回最先匹配到的符合条件的祖先元素
// 从当前元素开始,返回最先匹配到的符合条件的祖先元素
$('.active').closest().css('border', '1px solid pink') // 不设置,不匹配任何元素
$('.active').closest('.tab').css('border', '1px solid pink') // 从 active(子元素) 开始寻找匹配的祖先元素
  • find(child),获得当前匹配元素集合中每个元素的后代
// 获得当前匹配元素集合中每个元素的后代
$('.content').find('p').css('color', 'blue') // 从 content(父元素) 开始寻找匹配的子元素
  • end(),将当前元素的节点状态变为前一次的状态
//  从 content(父元素) 开始寻找匹配的子元素 p 将其的字体颜色设置为蓝色,将当前元素的状态变为前一次的状态,然后修改 选中元素的 css 样式(类似改变this指向)
$('.content').find('p').css('color', 'blue').end().css('color', 'yellow') // 将匹配的元素变为前一次的状态
  • siblings(),获得匹配元素集合中所有元素的同辈元素
//  获得匹配元素集合中所有元素的同辈元素
$('.oldNode1').siblings().css('fontSize', '19px') // 获得匹配元素集合中的所有同辈元素
$('.oldNode1').siblings('span').css('color', 'brown') // 获得匹配元素集合中的所有同辈元素
  • eq(),匹配元素集合中的指定索引的一个元素
// 匹配元素集合中的指定索引的一个元素
$('.title1 span').eq(2).css('color', 'pink') // 匹配 title1 里面的所有 span 元素集合中索引为 2 的元素
$('.title span:eq(2)').css('color', 'pink') // 这种书写方式,eq内部不能放变量
  • index(),返回指定元素相对于其他指定元素的 index 位置
// index() 返回指定元素相对于其他指定元素的 index 位置
console.log($('.oldNode1').index()); // 返回元素相对于父元素的索引位置
console.log($('.index2').index());
  • each() ,循环,为每个匹配的元素执行函数
// each() 循环,为每个匹配的元素执行函数
$('.title span').each(function (index, dom) {
// index 当前遍历的元素的索引
// dom 当前遍历的元素
$(this).click(function () { // 为当前遍历的元素添加点击事件
    console.log(index); // 点击当前元素时,打印元素的索引
})
})
  • is(),根据选择器、元素或 jQuery 对象来检测,如果有元素匹配给定的条件,则返回 true
// is() 根据选择器、元素或 jQuery 对象来检测,如果有元素匹配给定的条件,则返回 true
$('.title1').children().click(function () { // 选中 title1 中的所有子元素,并且给子元素添加点击事件
if ($(this).is('.oldNode')) { // 判断 当前的元素与 oldNode 是否相同
    $(this).css('color', 'green') // 为 true 则将字体颜色改为绿色
} else {
    $(this).css('color', 'blue') // 为 false 则将字体颜色改为蓝色
}
})
  • addClass() ,为每个匹配的元素添加指定的类名
// 为每个匹配的元素添加指定的类名
$('.active').addClass('red') // addClass() 添加一个类名
$('.show').addClass('yellow green') // addClass() 添加两个类名
  • removeClass() 从匹配的元素中删除全部或者指定的类
$('.show').removeClass('blue') // removeClass() 删除一个类名
  • toggleClass(),反转类名,对传入的值进行判断,有此类名则删除,没有则添加
// toggleClass() 反转类名,对传入的值进行判断,有此类名则删除,没有则添加
$('.oldNode').toggleClass('pink')
$('.oldNode1').toggleClass('pink')
  • hasClass(),检查元素是否含有某个特定的类,有则返回true
// hasClass() 检查元素是否含有某个特定的类,有则返回true
$('.title1').children().click(function () {
    if ($(this).hasClass('pink')) {
        console.log('我这里有pink哦~~~亲!');
    } else {
        console.log('我这里没有pink哦~~~亲!');
    }
})
  • attr()prop()
    • prop() 方法应该用于检索属性值,例如 DOM 属性(如 tagName, nodeName, nodeType, checked 等)。
    • 如需检索 HTML 属性,请使用 attr() 方法代替。
// attr() 用于操作元素标签上的属性 设置或返回被选元素的属性和值
console.log( $('.box').attr('id') ); // 获取元素的 id 属性和值
$('.box').attr('haha','哈哈') // 设置属性和值

// prop() 用于检索属性值 设置或返回被选元素的属性和值
$('.box').click(function(){
    // 判断勾选状态
    if ( $('input').eq(0).prop('checked') ) { // 判断 input 中索引为 0 的是否被勾选
        console.log( '您已勾选哦~~~' ); // 返回 true 则表示已勾选
    } else {
        console.log( '您还未勾选呢~~~' ); // 返回 false 则表示未勾选
    }
    $('input').eq(2).prop( 'checked',true ) // 给 inpu 中索引为 2 的元素设置成点击状态
})
  • removeAttr(),匹配的元素中 删除一个指定的属性
$('.box').removeAttr('hehe') // 从匹配的元素中 删除一个指定的属性
  • html() 设置或取得第一个匹配元素的html内容
  • text() 设置或取得第一个匹配元素的文本内容
console.log( $('.show').text() ); // 获取第一个匹配元素其中的 文本 内容
console.log( $('.show').html() ); // 获取第一个匹配元素其中的 html 内容
$('.show').text('没错,我就是猴子请来的救兵') // 设置第一个匹配元素的 文本 内容,会覆盖之前的内容
$('.show').html('<h3>我才是猴子请来的救兵</h3>')// 设置第一个匹配元素的 html 内容,会覆盖之前的内容

  • val(),设置或返回匹配元素的值(表单元素)
// val() 设置或返回匹配元素的值(表单元素)
$('.ipt').val('请输入手机号码') // 设置值
console.log( $('.ipt').val() ); // 当 val 不设置值时,则为获取值
  • css() ,设置或返回匹配元素的样式属性
// css()  设置或返回匹配元素的样式属性
console.log( $('.box').css('width') ); // 获取元素的指定 css 属性值
var box = document.querySelector('.box')
console.log( getComputedStyle(box).width ); // 获取元素的指定 css 属性值
$('.box').css('color','white') // 设置元素的单个 css 属性
$('.box').css({ // 设置多个属性的值
    width:'400px',
    height:'400px'
})
  • width()height(),设置或返回匹配元素的宽度(宽度)
//width()  height() 设置或返回匹配元素的宽度(宽度)
console.log( $('.box').width() ) // 获取元素的宽度 返回的是数值类型
console.log( $('.box').height() ) // 获取元素的高度 返回的是数值类型
$('.box').width(500) // 设置元素的宽度
$('.box').height(500) // 设置元素的高度
  • scrollLeft() 设置或返回匹配元素相对滚动条左侧的偏移
  • scrollTop() 设置或返回匹配元素相对滚动条顶部的偏移
  • position() 获取匹配元素相对于定位父元素的偏移 {left: 40, top: 50}
  • offset() 获取或设置匹配元素在整个页面的相对偏移 {left: 40, top: 50}
  • wrap() 使用指定的 HTML 元素来包裹每个被选元素 $("p").wrap("
    "); // 给每个P元素包裹一个div元素
  • $.trim( str ) 移除字符串开始和末尾处的所有空白字符
  • $.each() 遍历数组