详解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 相关文章推荐
jquery遍历之parent()和parents()的区别及parentsUntil()方法详解
Dec 02 Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
Jan 28 Javascript
javascript 控制input只允许输入的各种指定内容
Jun 19 Javascript
JavaScript中使用document.write向页面输出内容实例
Oct 16 Javascript
jQuery插件实现适用于移动端的地址选择器
Feb 18 Javascript
Ionic如何创建APP项目
Jun 03 Javascript
Node.js使用NodeMailer发送邮件实例代码
Mar 06 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
Sep 10 Javascript
vue-router重定向不刷新问题的解决
Jun 25 Javascript
基于游标的分页接口实现代码示例
Nov 12 Javascript
jQuery操作cookie的示例代码
Jun 05 jQuery
详解Vue项目的打包方式(生成dist文件)
Jan 18 Vue.js
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防注入代码
2010/04/07 PHP
PHP Undefined index报错的修复方法
2011/07/17 PHP
一个典型的PHP分页实例代码分享
2011/07/28 PHP
Thinkphp的volist标签嵌套循环使用教程
2014/07/08 PHP
php输出xml必须header的解决方法
2014/10/17 PHP
php集成环境xampp中apache无法启动问题解决方案
2014/11/18 PHP
ECSHOP完美解决Deprecated: preg_replace()报错的问题
2016/05/17 PHP
PHP时间日期增减操作示例【date strtotime实现加一天、加一月等操作】
2018/12/21 PHP
Laravel开启跨域请求的方法
2019/10/13 PHP
yii框架结合charjs实现统计30天数据的方法
2020/04/04 PHP
JavaScript高级程序设计 XML、Ajax 学习笔记
2011/09/10 Javascript
jQuery中filter()和find()的区别深入了解
2013/09/25 Javascript
jquery实现标签上移、下移、置顶
2015/04/26 Javascript
基于jquery实现轮播焦点图插件
2016/03/31 Javascript
深入浅析JavaScript的API设计原则
2016/06/14 Javascript
很实用的js选项卡切换效果
2016/08/12 Javascript
如何使用Bootstrap创建表单
2017/03/29 Javascript
Vue.js在使用中的一些注意知识点
2017/04/29 Javascript
微信小程序利用for循环解决内容变更问题
2020/03/05 Javascript
vue 接口请求地址前缀本地开发和线上开发设置方式
2020/08/13 Javascript
微信小程序对图片进行canvas压缩的方法示例详解
2020/11/12 Javascript
关于element的表单组件整理笔记
2021/02/05 Javascript
深入讨论Python函数的参数的默认值所引发的问题的原因
2015/03/30 Python
Python 数据结构之堆栈实例代码
2017/01/22 Python
Python实现基于二叉树存储结构的堆排序算法示例
2017/12/08 Python
Numpy数组array和矩阵matrix转换方法
2019/08/05 Python
美国生日蛋糕店:Bake Me A Wish!
2017/02/08 全球购物
医药营销专业个人自荐信
2013/09/29 职场文书
在求职信中如何凸显个人优势
2013/10/30 职场文书
化工机械应届生求职信
2013/11/04 职场文书
职专应届生求职信
2013/11/16 职场文书
舞蹈教育学专业自荐信
2014/06/15 职场文书
连锁超市项目计划书
2014/09/15 职场文书
2015年学校关工委工作总结
2015/04/03 职场文书
争做文明公民倡议书
2019/06/24 职场文书
浅谈Python基础之列表那些事儿
2021/05/11 Python