详解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 相关文章推荐
javascript笔试题目附答案@20081025_jb51.net
Oct 26 Javascript
javascript实现在线客服效果
Jul 15 Javascript
javascript引用类型之时间Date和数组Array
Aug 27 Javascript
js表单处理中单选、多选、选择框值的获取及表单的序列化
Mar 08 Javascript
jQuery插件jqGrid动态获取列和列字段的方法
Mar 03 Javascript
Vuejs 组件——props数据传递的实例代码
Mar 07 Javascript
jQuery插件FusionCharts实现的3D帕累托图效果示例【附demo源码】
Mar 25 jQuery
简单实现js上传文件功能
Aug 21 Javascript
Nginx 配置多站点vhost 的方法
Jan 07 Javascript
详解Angular5 路由传参的3种方法
Apr 28 Javascript
微信小程序textarea层级过高的解决方法
Mar 04 Javascript
JavaScript实现沿五角星形线摆动的小圆实例详解
Jul 28 Javascript
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中关于普通表单多文件上传的处理方法
2011/03/25 PHP
php+ajax 实现输入读取数据库显示匹配信息
2015/10/08 PHP
通过PHP自带的服务器来查看正则匹配结果的方法
2015/12/24 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
2018/04/09 PHP
Extjs学习过程中新手容易碰到的低级错误积累
2010/02/11 Javascript
javascript中字符串拼接需注意的问题
2010/07/13 Javascript
变量声明时命名与变量作为对象属性时命名的区别解析
2013/12/06 Javascript
php显示当前文件所在的文件以及文件夹所有文件以树形展开
2013/12/13 Javascript
webapp框架AngularUI的demo改造之路
2014/12/21 Javascript
JS控制表单提交的方法
2015/07/09 Javascript
Js遍历键值对形式对象或Map形式的方法
2016/08/08 Javascript
[原创]JavaScript语法高亮插件highlight.js用法详解【附highlight.js本站下载】
2016/11/01 Javascript
Jquery uploadify 多余的Get请求(404错误)的解决方法
2017/01/26 Javascript
微信小程序中的店铺评分组件及vue中用svg实现的评分显示组件
2018/11/16 Javascript
layui框架与SSM前后台交互的方法
2019/09/12 Javascript
JS实现打字游戏
2019/12/17 Javascript
jquery插件懒加载的示例
2020/10/24 jQuery
[03:13]DOTA2-DPC中国联赛1月25日Recap集锦
2021/03/11 DOTA
利用Python演示数型数据结构的教程
2015/04/03 Python
Python中SOAP项目的介绍及其在web开发中的应用
2015/04/14 Python
利用Django内置的认证视图实现用户密码重置功能详解
2017/11/24 Python
python实现员工管理系统
2018/01/11 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
python爬虫之urllib,伪装,超时设置,异常处理的方法
2018/12/19 Python
python logging模块的使用总结
2019/07/09 Python
python实现银行管理系统
2019/10/25 Python
Python编程快速上手——疯狂填词程序实现方法分析
2020/02/29 Python
Python3+Django get/post请求实现教程详解
2021/02/16 Python
将"引用"作为函数返回值类型的格式、好处和需要遵守的规则
2016/02/09 面试题
课外访万家心得体会
2014/09/03 职场文书
父亲婚礼答谢词
2015/01/04 职场文书
2015年电气技术员工作总结
2015/07/24 职场文书
党务工作者主要事迹材料
2015/11/03 职场文书
初中语文教师研修日志
2015/11/13 职场文书
上手简单,功能强大的Python爬虫框架——feapder
2021/04/27 Python
Redis可视化客户端小结
2021/06/10 Redis