详解jQuery中的元素的属性和相关操作


Posted in Javascript onAugust 14, 2015

元素属性

元素的属性中可以包含很多有用的信息,所以如何设置或得到属性中的值,就显得非常重要。

jQuery 的 $.fn.attr 方法可以作为 setter 和 getter 使用,用来设置或获取属性的值。和 $.fn.css 用法类似,$.fn.attr 既可一次性接受单个属性,也可以接受多个属性(对象) :

$('a').attr('href', 'allMyHrefsAreTheSameNow.html');
$('a').attr({
  'title' : 'all titles are the same too!',
  'href' : 'somethingNew.html'
});

上面代码中写对象的时候写成多行了,更具可读性。

$('a').attr('href'); // 返回选择其中第一个超链接的链接地址

一旦选择器的结果集中有元素了,就可以这些元素为基准点遍历其它元素了。关于 jQuery 遍历元素的方法,详见 http://api.jquery.com/category/traversing/,如:

$('h1').next('p');
$('div:visible').parent();
$('input[name=first_name]').closest('form');
$('#myList').children();
$('li.selected').siblings();

还可以用 $.fn.each 方法,对结果集中的元素一个一个处理:

$('#myList li').each(function(idx, el) {
  console.log(
    'Element ' + idx +
    'has the following html: ' +
    $(el).html()
  );
});

移动、复制、删除元素

如果要移动一个元素的位置:

// 把第一个列表移至最后
var $li = $('#myList li:first').appendTo('#myList');

// 另外一种方法,也能达到同样效果
$('#myList').append($('#myList li:first'));

复制一个元素

// 把第一个 li 做一份拷贝,然后放置列表的最后
$('#myList li:first').clone().appendTo('#myList');

如果复制元素的时候,想把元素的属性和事件等信息也一起复制了的话,调用 $.fn.clone 的时候给个参数 true 就 OK 了。

再说删除元素,jQuery 中各有两种方法可以删除元素:$.fn.remove 和 $.fn.detach,这两个方法都可以从页面中删除元素,并且这两种方法的返回值都是被删除的元素,区别是 $.fn.remove 的返回的元素中的不再包含元素的一些附属信息,如 id 和 class 等信息,也不包括元素上绑定的事件。$.fn.detach 则不同,将被删除元素中的附属信息和事件也一并保存了下来,具体是用哪种,要看实际需求了。
创建新元素

jQuery 可以很快捷的换件新元素:

$('<p>这是一个新段落</p>');
$('<li class="new">新列表元素</li>');

$('<a/>', {
  html : '这是一个 <strong>新</strong> 超链接',
  'class' : 'new',
  href : 'foo.html'
});

注意上面传入的 JavaScript 对象,里面的第二个属性 class 被加了引号,因为 class 是 JavaScript 的保留字,html 和 href 不是,所以不需要加引号。

创建新元素后,新元素并不会自动加入到页面中。加入页面中的话,可以用下面的方法:

var $myNewElement = $('<p>New element</p>');
$myNewElement.appendTo('#content');

$myNewElement.insertAfter('ul:last'); // 此操作会把 p 元素从 #content 中移除
$('ul').last().after($myNewElement.clone()); // 当然也可以克隆一个出来,现在 #content 中有两个 p 了哦

严格来说,不是一定要将新创建的元素保存在一个变量中,可以在创建后直接加入页面内。但是很多时候新创建的元素都要被多次使用,所以要缓存在一个变量中,这样不用重复去创建它了。

你甚至可以在向页面添加元素时创建它,但是这种情况下无法获得新创建元素的引用:

$('ul').append('<li>list item</li>');

往页面中添加新元素非常简单,但是如果需要向页面新加很多很多个元素的话,可能会有性能问题。因为每次向页面中添加元素,整个页面的 HTML 都要作为字符串参与拼接,这是非常耗费性能的。这种情况下,通常有以下处理方法:

var myItems = [], $myList = $('#myList');

for (var i=0; i<100; i++) {
  myItems.push('<li>item ' + i + '</li>');
}

$myList.append(myItems.join(''));
Javascript 相关文章推荐
一个js写的日历(代码部分网摘)
Sep 20 Javascript
jQuery autocomplate 自扩展插件、自动完成示例代码
Mar 28 Javascript
js四舍五入数学函数round使用实例
May 09 Javascript
jquery简单图片切换显示效果实现方法
Jan 14 Javascript
使用jQuery mobile库检测url绝对地址和相对地址的方法
Dec 04 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
Apr 17 Javascript
如何使用AngularJs打造权限管理系统【简易型】
May 09 Javascript
jquery+html仿翻页相册功能
Dec 20 Javascript
JS使用iView的Dropdown实现一个右键菜单
May 06 Javascript
js prototype和__proto__的关系是什么
Aug 23 Javascript
node.js中module模块的功能理解与用法实例分析
Feb 14 Javascript
jQuery 图片查看器插件 Viewer.js用法简单示例
Apr 04 jQuery
js实现人才网站职位选择功能的方法
Aug 14 #Javascript
jQuery入门基础知识学习指南
Aug 14 #Javascript
Jquery全选与反选点击执行一次的解决方案
Aug 14 #Javascript
js实现Select列表各项上移和下移的方法
Aug 14 #Javascript
innerHTML中标签可以换行的方法汇总
Aug 14 #Javascript
jQuery编程中的一些核心方法简介
Aug 14 #Javascript
CSS图片响应式 垂直水平居中
Aug 14 #Javascript
You might like
php 模拟POST|GET操作实现代码
2010/07/20 PHP
PHP中Session可能会引起并发问题
2015/06/26 PHP
关于php微信订阅号开发之token验证后自动发送消息给订阅号但是没有消息返回的问题
2015/12/21 PHP
PHP智能识别收货地址信息实例
2019/01/05 PHP
yii2.0框架数据库操作简单示例【添加,修改,删除,查询,打印等】
2020/04/13 PHP
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
javascript实现全局匹配并替换的方法
2015/04/27 Javascript
JavaScript函数使用的基本教程
2015/06/04 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
2016/02/03 Javascript
javascript如何实现360度全景照片问题汇总
2016/04/04 Javascript
基于JS实现数字+字母+中文的混合排序方法
2016/06/06 Javascript
Js遍历键值对形式对象或Map形式的方法
2016/08/08 Javascript
jquery学习笔记之无new构建详解
2017/12/07 jQuery
初学node.js中实现删除用户路由
2019/05/27 Javascript
NodeJS有难度的面试题(能答对几个)
2019/10/09 NodeJs
JS前端基于canvas给图片添加水印
2020/11/11 Javascript
[01:20:38]完美世界DOTA2联赛 GXR vs IO 第一场 11.07
2020/11/09 DOTA
python常用web框架简单性能测试结果分享(包含django、flask、bottle、tornado)
2014/08/25 Python
Python栈类实例分析
2015/06/15 Python
Python实现字典的key和values的交换
2015/08/04 Python
老生常谈python的私有公有属性(必看篇)
2017/06/09 Python
python使用pipeline批量读写redis的方法
2019/02/18 Python
python实现批量视频分帧、保存视频帧
2019/05/31 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
详解Python Qt的窗体开发的基本操作
2019/07/14 Python
通过python检测字符串的字母
2020/02/18 Python
草莓网中国:StrawberryNet中国
2020/08/17 全球购物
UNIX特点都有哪些
2016/04/05 面试题
应届生保险求职信
2013/11/11 职场文书
经典导游欢迎词大全
2014/01/16 职场文书
红旗方阵解说词
2014/02/12 职场文书
年会搞笑主持词
2014/03/27 职场文书
丧事主持词大全
2014/04/02 职场文书
日语系毕业求职信
2014/07/27 职场文书
2014年酒店前台工作总结
2014/11/14 职场文书
python实现学生信息管理系统(面向对象)
2022/06/05 Python