append替换代码后jquery不起作用_jQuery设计思想及其简单实现

996daebffa4c32688f393fceb8d28ec4.png

前言:

jQuery是目前最长寿也是使用最广泛的javaScript函数库,据统计全球排名前100k的网站,有90%都在使用jQuery,远远超过了其他的库,数据如下图

61c93adf748c61befc11aa2208d5622c.png
jQuery使用数据

jQuery的实现都是基于DOM api的,大家都知道js提供的dom操作代码繁琐,而jQuery的核心里历练wirte less,do more.

当我们使用jQuery时,只需使用$($是jQuery的别名)就会声明一个全局函数,这个函数接受一个选择器,以获取对应的元素,之后便返回一个由jQuery构造出来对象,也称jQuery对象,此对象包含了可操作元素的方法.


一、jQuery 如何获取元素

jQuery的基本设计思想和主要用法,就是'选择某个网页元素,然后对其进行某种操作'

jQuery使用$(selector) 的方法获取页面的操作元素,selector接受字符串或着是元素组成的数组

我们可以使用DOM API的querySelectorAll 进行类似的实现

window.$ = window.jQuery = function (selectorOrArray) {
    let elements
    if(typeof selectorOrArray === 'string'){
        elements = document.querySelectorAll(selectorOrArray)
    }else if(selectorOrArray instanceof Array){
        elements = selectorOrArray
    }
    return {//返回一个可操作elements的对象}
}
  • 查找元素

当我们获取元素后,需要找到并操作其内部的元素时,可以调用jQuery对象里面的find()函数

find()函数的实现,需要使用for循环来遍历,并将新生成的数组放入$(selector)

find(selector){        
        let array = []
        for(let i = 0; i < elements.length; i++){
            array.concat(Array.from(elements[i].querySelectorAll(selector)))
        }
        return $(array)
    }
  • 遍历函数

在jQuery对象的操作方法中,遍历是经常用到的,那我们何不封装一个遍历函数each() 来调用呢?

each(fn){
        for(let i = 0; i < elements.length; i++){
            fn.call(null, elements, i)
        }
        return this
    }

如此一来,有了each()函数,find() 函数就能更简洁的实现了,如下

find(selector){        
        let array = []
        this.each(node => {
            array.concat(Array.from(node.querySelectorAll(selector)))
        })
        return $(array)
    }

___________________________________________________________________________________________

二、jQuery 的链式操作是怎样的

jQuery设计思想之一,获取元素后,可以对它进行一系列的操作,并且所有操作可以连接在一起,称为链式操作,举个栗子:

 $('div').find('h3').eq(2).html('Hello')

分解开来,就是下面这样

$('div') //找到div元素

   .find('h3') //选择其中的h3元素

   .eq(2) //选择第3个h3元素

   .html('Hello'); //将它的内容改为Hello

从上面简易实现的代码可以看出,jQuery的操作函数运行后,都会返回一个jQuery对象,这样是的不同操作可以连在一起,这是jQuery最令人称道、最方便的特点

___________________________________________________________________________________________

三、jQuery 如何创建元素与属性的处理

  • 创建元素节点

$("<div></div>")

  • 创建为文本节点

$("<div>我是文本节点</div>")

  • 创建为属性节点

$("<div class='right'><div class='aaron'>动态创建DIV元素节点</div></div>")

这就是jQuery创建节点的方式,让我们保留HTML的结构书写方式,非常的简单、方便和灵活

___________________________________________________________________________________________

四、jQuery 如何移动元素

jQuery设计思想之一,就是提供两组方法,来操作元素在网页中的位置移动。一组方法是直接移动该元素,另一组方法是移动其他元素,使得目标元素达到我们想要的位置。

  • 第一种方法是使用.insertAfter(),把div元素移动p元素后面:

$('div').insertAfter($('p'))

  • 第二种方法是使用.after(),把p元素加到div元素前面:

$('p').after($('div'))

表面上看,这两种方法的效果是一样的,唯一的不同似乎只是操作视角的不同。但是实际上,它们有一个重大差别,那就是返回的元素不一样。第一种方法返回div元素,第二种方法返回p元素。你可以根据需要,选择到底使用哪一种方法。

使用这种模式的操作方法,一共有四对:

.insertAfter()`和.after():在现存元素的外部,从后面插入元素
 .insertBefore()和.before():在现存元素的外部,从前面插入元素
 .appendTo()和.append():在现存元素的内部,从后面插入元素
 .prependTo()和.prepend():在现存元素的内部,从前面插入元素

___________________________________________________________________________________________

五、jQuery 如何修改元素的属性

jQuery 提供多种修改元素的属性的方法:

  • attr()函数获取标签的某个属性

$('#p').attr('class') //获取id为p的标签的属性值

  • attr()修改或修改标签的属性值

$('#p').attr('class','red') //如果存在就是修改,如果不存在就是添加

  • 3删除某个属性

$('#p').removeAttr('name')

  • 添加class名称

$('#p').addClass('blue')

  • 删除class名称

$('#p').removeClass('yellow')

  • 有class就删除 没有就添加

$('#p').toggleClass('asdf')

  • val()获取输入框内容

var s = $('input[name="user"]').val()


参考资料:jQuery设计实现 - 阮一峰的网络日志

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值