jQuery的DOM操作1

如何筛选jQuery对象

1,DOM对象和jQuery对象的区别
  • DOM对象(DOM元素)是浏览器的网页页面中渲染出来的元素
  • jQuery对象是对0个,1个或多个原生DOM对象的封装,是一个类数组
  • jQuery对象和原生DOM对象之间可以相互转换
    $(domObject) : jQuery Object
    $(xxx).get(0) : DOM Object
    $(xxx)[0] : DOM Object
  • 检测DOM对象还是jQuery对象的方法:obj.jqueryobj.nodeType
2,创建元素
var div = $('<div>hello word</div>');
console.log($('div'));  //在没有放到页面之前无法选中
div.appendTo('body');   //追加到body的最后面
console.log($('div'));  //在没有放到页面之后可以选中
3,设置元素属性
$(function()
{
    //方法一:声明一个空元素,然后再设置属性
    var link1 = $('<a>',{
        text:'baidu',
        href:'http://www.baidu.com',
        target:'_blank_',
        title:'goto baidu'
    });
    link1.appendTo('body');

    //方法二:非空元素的情况,用attr实现
    var link2 = $('<a>baidu</a>').attr({
        // text:"baidu",
        href:'http://www.baidu.com',
        target:'_blank_',
        title:'goto baidu'
    });
    link2.appendTo('body');
})
4,检查和获取元素
//用length属性检查元素数量
var elements1 = $('li');
console.log(elements1.length);  //值为9

//提取元素:方法1
//[index]       返回DOM元素
//get([index])  返回DOM元素或元素集合
console.log(elements1[0]);      //获取item-1
console.log(elements1.get(0));  //获取item-1

// console.log(elements1[]);    //!!这样不可以,会报错!!
console.log(elements1.get());   //获取item-1~item-9 返回一个数组

console.log(elements1[-1]);     //这样不可以,返回值是undefined
console.log(elements1.get(-1)); //获取item-9

console.log(elements1[100]);    //越界,返回值是undefined
console.log(elements1.get(100));//越界,返回值是undefined

console.log(elements1.toArray());//跟get()一样

//提取元素:方法2
//eq(index)     返回jQuery对象
console.log(elements1.eq(0));   //获取item-1
console.log(elements1.eq());    //什么都不返回,跟get()不一样
console.log(elements1.eq(-1));  //获取item-9
console.log(elements1.eq(100)); //什么都不返回
console.log(elements1.first()); //获取第一个元素item-1
console.log(elements1.last());  //获取最后一个元素item-9

注意1:api官方文档
注意2:尽量使用方法而不是筛选器获取jQuery对象,因为方法的效率比较高

5,通过关系查找jQuery对象
  • 通过父子关系查找
//children([selector])  直接子元素 不返回文本节点
console.log($('#box3').children());

//contents([selector])  直接子元素 返回文本节点(包括换行)
console.log($('#box3').contents());

//children([selector])  直接子元素(selector) 不返回文本节点
console.log($('#box3').children('ul'));

//contents([selector])  直接子元素(selector),返回文本节点(不包括换行)
console.log($('#box3').contents('ul'));

//find(selector)        后代元素 包括子元素和孙子元素
console.log($('#box3').find('.item3')); //注意:.item3

//parent([selector])    直接父元素
console.log($('#info').parent());

//parents([selector])   祖先元素 包括父元素和祖父元素等
console.log($('#info').parents());

//parent([selector])    直接父元素(selector)
console.log($('.item3').parent('div'));     //直接父元素如果是div,能找到,否则找不到

//parents([selector])   祖先元素(selector) 包括父元素和祖先元素
console.log($('.item3').parents('div'));    //找到所有div元素

//parentsUntil([selector]) 到selector为止(不包含selector),不包括selector
console.log($('#info').parentsUntil('#box2'));

//closest(selector) 从当前元素开始向上逐级查找,并返回最先匹配的元素
console.log($('#info').closest('#box2'));

// closest与parents的区别:
// closest是从当前元素开始匹配的,parents是从父元素开始匹配的
// closest向上找,找到匹配的就停止,parents会找到所有的父元素,并返回一个集合
// closest返回1个或0个,parents能返回多个
  • 通过兄弟姐妹关系查找
//next([selector])      当前元素之后紧邻的同辈元素
console.log($('.item4').next('li'));

//nextAll([selector])   当前元素之后所有的同辈元素
console.log($('.item4').nextAll('li'));

//nextUntil([selector]) 当前元素之后所有的同辈元素 selector为止(不包括selector)
//如果不写selector,那么效果和.nextAll()一致
console.log($('.item4').nextUntil('.item7'));

//prev([selector])      当前元素之前紧邻的同辈元素
console.log($('.item4').prev('li'));

//prevAll([selector])   当前元素之前所有的同辈元素
console.log($('.item4').prevAll('li'));

//prevUntil([selector]) 当前元素之前所有的同辈元素 selector为止
console.log($('.item4').prevUntil());

//siblings([selector])  next + prev
console.log($('.item6').siblings('li'));
6,筛选和遍历jQuery对象
  • 添加/过滤元素
//add(selector)     增加元素
console.log($('.item1,.item2,.item3'));
console.log($('.item1').add('.item2').add('.item3'));

//not(selector)     过滤元素 方法一
console.log($('li').not('.item4'));

//filter(selector)  过滤元素 方法二
//与not相反
console.log($('li').filter('.item4'));

    //使用函数
    console.log($('li').not(function(index)
    {
        return $(this).hasClass('item4');
    }));
    console.log($('li').filter(function(index)
    {
        return $(this).hasClass('item4');
    }));

//has(selector)     过滤元素 方法三
//筛选包含特定对象的元素
console.log($('li').has('ul'));
  • 获取子集,转换元素
//slice(start[,end])    获取子集
console.log($('li').slice(3,5));    //左闭右开 NO.3 NO.4
console.log($('li').slice(-2));     //左闭右开 NO.8 NO.9

//map(callback)         转化元素
//将一个jQuery对象装换为另一个jQuery对象
console.log();
console.log($('div').map(function(index,domElement)
{
    return this.id;
    // return null;         返回值不会加入到集合中
    // return undefined;    返回值不会加入到集合中
    //return domElement.id; 和this.id是一样的效果
}));
  • 遍历元素
//each(iterator)    遍历元素
console.log($('div').each(function(index,domElement)
{
    if(this.id === 'box2')
    {
        // return true; //相当于continue
        return false;   //相当于break
    }
    this.title = this.id;   //this.innerText和this.innerHTML一样
}))
7,其他操作
//is(selector)  存在元素,返回ture,反之返回false
console.log($('#box3').children().is('p'));
console.log($('#box3').children().is('img'));

//end()         将匹配元素集还原到之前的操作状态
//end方法之前必须是以一个破坏性操作,否则会返回一个空对象
//破坏性操作:map(),children(),not(),filter(),next(),find(),parent()
console.log(
    $('#box3').find('.item4').css('color','red')    //这个操作之后jQuery对象已经点位在item4上了
    .end().find('.item6').css('color','blue')       //所以,必须先执行end(),把对象重新定位到box3上
);

//addBack([selector])   在进行破坏性操作之后,把原来的元素也包含进来
//.item7,.item8都会设置颜色样式
console.log($('.item7').nextUntil('.item9').addBack().css('color','orange'));

对jQuery对象的属性,特性,以及数据的操作

1,特性和属性的区别
//特性:attribute:值为string,要已经写在标签内的内容,否则取出来就是未定义
//属性:properties:值为string,boolean,number,object

var checkbox = document.getElementById('check');

console.log(checkbox.getAttribute('tabindex')); //获取特性
console.log(checkbox.tabIndex);                 //获取属性(驼峰形式)

console.log(checkbox.getAttribute('style'));    //获取特性
console.log(checkbox.style);                    //获取属性

console.log(checkbox.getAttribute('checked'));  //获取特性
console.log(checkbox.checked);                  //获取属性 checked,selected等布尔类型的属性要用获得属性的方法!!

// 特性与属性的区别:
//1. 如果attribute是本来在DOM对象中就存在的,attribute和properties的值就会同步;
//2. 如果attribute是本来在DOM对象中就存在,但是类型为Boolean,那么attribute和properties的值就不会同步;
    //比如checkbox的checked属性
//3. 如果attribute不是DOM对象内建的属性(比如是自己瞎写的),attribute和properties的值不会同步;
//4. 特性不区分大小写,属性区分大小写

//特例1:虽然会同步,但是值不一样
//img的src属性:绝对地址
//img的src特性:相对地址

//特列2:虽然会同步,属性名和特性名不一样
//属性名:className             由于class是js的保留字,无法直接用于属性
//特性名:getAttribute('class')

知识点:一般情况下,操作特性就可以了,只是在某些特定情况下,需要操作属性(比如checked,selected等布尔类型的属性)

2,获取,设置,删除特性
//!!特性不区分大小写!!
var img = $('img');

console.log(img.attr('title'));         //获取第一个元素的特性
console.log(img.attr('title','123'));   //设置所有元素的特性  !!这里需要注意,并不是第一个,而是所有img元素

//同时操作复数个特性
img.attr(
{
    title:'new title',
    alt:'new alt',
    tabindex:2  //会自动转换为字符串
});

//使用操作特性
// previousValue:更改前的特性值
img.attr('title',function(index,previousValue)
{
    console.log(previousValue);
    return previousValue + 'new';
});

// removeAttr(name)删除特性
img.removeAttr('title');        // 删除title特性
img.removeAttr('alt tabindex'); // 删除alt,tabindex特性
3,获取,设置,删除属性
//!!属性区分大小写!!
var img = $('img'),
    checkbox = $('#check');

//获取属性
console.log(checkbox.prop('checked'));  //返回值false
console.log(checkbox.prop('Checked'));  //返回值undefined,因为属性区分大小写
console.log(checkbox.checked);          //返回值undefined,因为checkbox是一个jQuery对象
console.log(checkbox.get(0).checked);   //返回值false,因为把jQuery对象转换成了DOM对象
console.log(checkbox.attr('checked'));  //返回值undefined,因为特性不存在

console.log(img.prop('class'));         //返回值img-jQuery,可以直接获取classname
console.log(img.prop('className'));     //返回值img-jQuery,跟上面是一样的

console.log(checkbox.prop('tabindex')); //返回值1
console.log(checkbox.get(0).tabindex);  //返回值undefined,因为在DOM里面一定要用驼峰形式获取
console.log(checkbox.get(0).tabIndex);  //返回值1

//改变属性
console.log(checkbox.prop('tabindex',2));   //改变tabindex的值为2

//!!建议用prop来更改是否被选中,因为attr会改变HTML的结构!!
console.log(checkbox.prop('checked',true)); //改变checked的值为true

//删除属性 一次只能删除一个属性
checkbox.removeProp('title');   //title的值变为undefined,这是为了防止直接删除内置属性的话,浏览器报错
4,在元素中存取数据
  • 获取数据
<img id ="log" src="logo.jpg"
        alt="jQuery logo" class="img-jQuery" title="jQuery logo" 
        data-id='1' data-data1='html data1' />

var img = $('img'),
    checkbox = $('#check');

//获取数据
console.log(img.data('data1'));  // img标签中有data-data1特性,这种形式可以获取到它的值

console.log(checkbox.data('description'));  //返回值undefined,因为还没有对这个属性的数据设置过任何值
checkbox.data('description','some desc');   //设置值为some desc
console.log(checkbox.data('description'));  //返回值some desc,因为已经对这个属性的数据设置了值为some desc

checkbox.data('lastdesc','some desc');
console.log(checkbox.data('lastdesc'));     //返回值为some desc
console.log(checkbox.data('lastDesc'));     //返回值为undefined
console.log(checkbox.data('last-desc'));    //返回值为undefined

checkbox.data('firstDesc','some desc');
console.log(checkbox.data('firstdesc'));    //返回值为undefined
console.log(checkbox.data('firstDesc'));    //返回值为some desc
console.log(checkbox.data('first-desc'));   //返回值为some desc

checkbox.data('mid-desc','some desc');
console.log(checkbox.data('middesc'));      //返回值为undefined
console.log(checkbox.data('midDesc'));      //返回值为some desc
console.log(checkbox.data('mid-desc'));     //返回值为some desc

checkbox.data('Cen-desc','some desc');
console.log(checkbox.data('cendesc'));      //返回值为undefined
console.log(checkbox.data('cenDesc'));      //返回值为undefined
console.log(checkbox.data('CenDesc'));      //返回值为some desc 首字母要一样
console.log(checkbox.data('cen-desc'));     //返回值为undefined
console.log(checkbox.data('Cen-desc'));     //返回值为some desc 首字母要一样

//总结1:如果用驼峰或者“-”形式来命名数据,那么获取数据时驼峰和“-”形式都可以用
//总结2:如果不用驼峰或者“-”形式来命名数据,那么获取数据时一定要和命名的名字一样才行
  • 修改数据
var img = $('img');

//更改数据 单个操作
img.data('data1','new data1');

//更改数据 多个操作
img.data({
    data3:'new data3',
    data4:'new data4',
    data5:'new data5'
});
  • 删除数据
var img = $('img');

img.data({
    data3:'new data3',
    data4:'new data4',
    data5:'new data5'
});

//删除数据
// img.removeData('data1');     //这种情况是删除不掉的,因为在HTML标签内本来就存在data1
// console.log(img.data());

// img.removeData('data3 data4');       //删除方法1 空格
// console.log(img.data());

// img.removeData(['data3','data4']);   //删除方法2 数组
// console.log(img.data());

img.removeData();                       //删除方法3 删除全部
  • 判断数据是否存在
var img = $('img');

img.data({
    data3:'new data3',
    data4:'new data4',
    data5:'new data5'
});

//!!注意:如果上面这一段代码被删除的话,那下面的值都是false
//因为hasData方法的判断不包括HTML标签里的data

//判断是否有数据 jQuery.hasData(element)  注意这里是DOM元素
console.log($.hasData(img));        //返回值false  jQuery元素
console.log($.hasData(img.get(0))); //返回值true   DOM元素
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,183评论 6 516
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,850评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,766评论 0 361
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,854评论 1 299
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,871评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,457评论 1 311
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,999评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,914评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,465评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,543评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,675评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,354评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,029评论 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,514评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,616评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,091评论 3 378
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,685评论 2 360

推荐阅读更多精彩内容

  • jQuery DOM操作 创建元素 只需要把DOM字符串传入$方法即可返回一个jQuery对象 添加元素 1..a...
    好奇男孩阅读 351评论 0 1
  • DOM节点的创建 jQuery节点创建与属性的处理 创建元素节点: 创建为属性节点: DOM节点的插入 DOM内部...
    Dl_毛良伟阅读 331评论 0 4
  • jQuery--DOM操作(一) 通过jQuery的选择器可以方便的获取页面上的元素,通过选择器获取到的,不管是多...
    我可能是个假开发阅读 337评论 0 5
  • 库和框架的区别? 框架也算是库的一种,但倾向于重量级一些,倾向于提供整套的解决方案,倾向于创造一些需要你来遵守的规...
    Iswine阅读 314评论 0 1
  • 一、元素操作 1.1内部插入 1.1.1 append() 1.1.2 appendTo() 1.1.3 prep...
    八点半的星光1101阅读 176评论 0 1