jquery change 无效 jqueryappend样式无效_jquery 字符串查找


jQuery设计思想

用jQuery风格重新封装DOM

链式风格 也叫jQuery风格

window.jquery()是我们提供的全局变量 jQuery(选择器)用来获取对应的元素

口头约定jQuery对象代指jQuery函数构造出来的对象 一定要记清jQuery对象不是说jQuery这个对象

链式风格 查

jQuery('#xxx')返回值并不是元素 而是一个API对象

jQuery('#xxx').find('.red')查找#xxx里的 .red元素

jQuery('#xxx').parent()获取爸爸

jQuery('#xxx').children()获取儿子

jQuery('#xxx').siblings()获取兄弟

如果你嫌弃jQuery太长 也可以写window.$=window.jQuery

命名风格

下面的代码令人误解

const div=$('div#test')

我们会误解以为div是一个DOM

实际上div是jQuery构造的api对象

改成这样

const $div=$('div#test')

$div.appendChild不存在,因为它不是DOM的对象

$div.find存在 因为他是jQuery对象

所有$开头的对象都是jQuery对象

链式风格 查

$('#xxx')返回值并不是元素 而是一个API对象

$('#xxx').find('.red')查找#xxx里的 .red元素

$('#xxx').parent()获取爸爸

$('#xxx').children()获取儿子

$('#xxx').siblings()获取兄弟

一、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()