jQuery高级技巧——DOM操作篇

页面加载之DOMReady事件

所谓domReady,也就是文档就绪,我们都知道,在操作dom时必须要在dom树加载完成后才能进行操作。如何检测DOM树已经构建完成,以下是一些实现的方式:

1.使用jQuery:

// with jQuery
$(document).ready(function(){ /* ... */ });
// shorter jQuery version
$(function(){ /* ... */ });

2.监听DOMContentLoaded事件,DOM 树创建完成后会触发,不支持IE10以下版本。

// without jQuery (doesn‘t work in older IEs)
document.addEventListener(‘DOMContentLoaded‘, function(){
// your code goes here
}, false);

3.监听readyState状态,可实现跨浏览器

readyState 的状态属性:

  • "uninitialized" – 原始状态
  • "loading" – 下载数据中
  • "loaded" – 下载完成
  • "interactive" – 还未执行完毕
  • "complete" – 脚本执行完毕
r(function(){
  alert(‘DOM Ready!‘);
});
function r(f){/in/.test(document.readyState)?setTimeout(‘r(‘+f+‘)‘,9):f()}

这个方法是不断监听readyState的loading状态,加载完成后则执行对应方法。具体可参考:http://www.dustindiaz.com/smallest-domready-ever

根据特定页面的执行对应的代码

如果所有页面的代码都写在一个JavaScript文件中,这样的代码就会难以维护。简单的办法就是根据不同的页面执行不同的代码。来看下例子:

例如在test.js有以下代码:

var route = {
        _routes: {}, // The routes will be stored here
        add: function(url, callback) {
            this._routes[url] = callback;
        },
        run: function() {
            jQuery.each(this._routes, function(pattern) { // pattern 指向_routes对象集合的key,即url
                if (location.href.match(pattern)) {
                    // "this" points to the function to be executed
                    this(); //this 指向指向 _routes对象集合的value,即要执行的方法
                }
            });
        }
    }
    // Will execute only on this page:
route.add(‘test.html‘, function() {
    alert(‘Hello there!‘);
});
route.add(‘products.html‘, function() {
    alert("this won‘t be executed :(");
});
// You can even use regex-es:
route.add(‘.*.html‘, function() {
    alert(‘This is using a regex!‘);
});
route.run();

使用逻辑与运算符

利用逻辑与运算符可以简化条件分支语句写法,例子:

一般的写法:

// Instead of writing this:
if($(‘#elem‘).length){
   // do something
}

更好的写法:

$(‘#elem‘).length && alert("doing something");

非常有用的jquery is()方法

is()方法非常有用,来看些例子:

HTML:

<div id="elem"></div>

JS:

// 变量保存jQuery对象
var elem = $(‘#elem‘);
// 判断是否为div
elem.is(‘div‘) && console.log("it‘s a div");
// 是否包含类名.bigbox
elem.is(‘.bigbox‘) && console.log("it has the bigbox class!");
// 是否可见
elem.is(‘:not(:visible)‘) && console.log("it is hidden!");
// 设置元素执行动画
elem.animate({‘width‘:200},1);
// 是否执行动画
elem.is(‘:animated‘) && console.log("it is animated!");

定义一个exists函数

判断一个jQuery对象是否存在需要判断length属性,可以封装为exists函数,简化代码,更加易读。

HTML:

<div id="elem"></div>

JS:

//一般方法
console.log($(‘#elem‘).length == 1 ? "exists!" : "doesn‘t exist!");
// 封装方法
jQuery.fn.exists = function(){ return this.length > 0; }
console.log($(‘#elem‘).exists() ? "exists!" : "doesn‘t exist!");

使用$()函数的第二个参数

$()函数可以接收两个参数,第二个参数的作用是什么,可以来看下例子:

<ul id="firstList" >
      <li>one</li>
      <li>two</li>
      <li>three</li>
</ul>

<ul id="secondList" >
      <li>blue</li>
      <li>green</li>
</ul>

作用一:

//选取一个元素,通过#firstList限制元素只能在当前的ul节点范围内选取
$(‘li‘ , ‘#firstList‘ ). each(function(){
    console.log($(this). html());
});//相当于$(‘#firstList‘ ). find(‘li‘ );

作用二:

//创建一个元素。第二个参数为对应的配置属性,包含jQuery方法会被执行
var div = $(‘<div>‘ ,{
 "class" : "bigBlue" ,
 "css" : {
 "background-color" : "purple"
 },
 "width" : 20,
 "height" : 20,
 "animate" : { //使用jQuery的方法作为属性
 "width" : 200,
 "height" : 50
 }
});

div. appendTo(‘body‘ );

取消右键Click事件

$(function(){
    $(document).on("contextmenu" , function(e){
             e. preventDefault();
    });
});

取消文本选中

//适应于所有浏览器$(‘p.descr‘ ). attr(‘unselectable‘ , ‘on‘ )
                  . css(‘user-select‘ , ‘none‘ )
                  . on(‘selectstart‘ , false);

解析锚元素URL

// 需要解析的URL
var url = ‘http://tutorialzine.com/books/jquery-trickshots?trick=12#comments‘ ;

// 通过url创建一个新的链接
var a = $(‘<a>‘ ,{ href:  url });

console. log(‘Host name: ‘ + a. prop(‘hostname‘ ));
console. log(‘Path: ‘ + a. prop(‘pathname‘ ));
console. log(‘Query: ‘ + a. prop(‘search‘ ));
console. log(‘Protocol: ‘ + a. prop(‘protocol‘ ));
console. log(‘Hash: ‘ + a. prop(‘hash‘ ));

输出结果:

Host name: tutorialzine.com
Path: /books/jquery-trickshots
Query: ?trick=12
Protocol: http:
Hash: #comments

以上是一些知识总结,如有任何建议或疑问,欢迎留言讨论。

参考链接:

http://www.cnblogs.com/rubylouvre/p/4277408.html

http://www.dustindiaz.com/smallest-domready-ever

时间: 2024-10-14 00:44:54

jQuery高级技巧——DOM操作篇的相关文章

js,jQuery和DOM操作的总结(二)

jQuery的基本操作 (1)遍历键值对和数组 var arr = [9, 8, 7, 6, 5, 4]; $.map(arr, function (ele, index) { alert(ele + '===' + index); //第一个参数是数组里面的值,第二个参数是索引 }) //=========================================// var keyWord = { "name": "老牛", "age"

jQuery学习----------DOM操作

DOM操作之创建元素: DOM: var ele = document.createElement("element") 例子:document.createElement("div") jQuery: var $ele = $("element")    //返回的是一个jQuery对象 例子:$("<div></div>") DOM操作之输入文本: DOM: var txt = document.c

第3章 jQuery的DOM操作

一.  DOM 分为DOM核心,HTML-DOM和CSS-DOM 1.DOM核心 不专属与javascript. 获取对象:document.getElementsByTagName('div') 获取属性:elem.getAtrribute('title') 2.html-DOM document.div elem.src 3.CSS-DOM elem.style.color='red' 二. jQuery的DOM操作 1.查找节点 (1)元素节点 1 2 alert($('ul li:eq(

jQuery进行DOM操作记录

1.在元素内部插入DOM元素 ①插入到元素内部原有元素之后 append(content)      返回值:jQuery  参数-content:要插入的元素String,Element,jQuery 为每一个匹配的元素内添加一些元素,参数既可以是字符串也可以是jQuery对象,如下: $("#1").append("input type='button' value='确定'/>")   在1的内部元素的后面添加一个按钮 $("#1")

jQuery常用dom操作

操作属性节点(type属性不支持修改和删除) attr('name')——取值(如果jq对象是多个,则只取得第一个值,例如:$('.class').attr('name')——只获得第一个class的name属性值) attr('name','value')——赋值 如果参数是json对象,那么则会同时修改多个属性值,例如:var kv = {name:'username',value:'tom'}; $('#username').attr(kv); 还可以通过函数的返回值来修改属性值,例如:$

Jquery的dom操作与原生dom的转换

本片文章包含了 jquery常见dom操作. q与原生dom对象的区别与转换 伪数组对象的知识 如有错误,烦请指正. 增 以下方法共性:可以一次添加多个内容,内容可以是DOM对象.HTML string. jQuery对象 创建元素 var obj = $('<div class="test"><p><span>Done</span></p></div>'); 两种方法可以创建元素 直接写入html 传入一个原生d

Jquery所有Dom操作汇总

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script type="text/javascript" src="jquery.1.11.1.min.js"></script> </head>

HTML 学习笔记 JQuery(DOM 操作)

一般来说,DOM操作分为三个方面,即:DOM Core(核心), HTML_DOM 和 CSS_DOM. 1.DOM Core DOM Core 并不专属于JavaScript,任何一种支持DOM的程序设计语言都可以使用它.他的用途并不局限于处理网页,也可以处理任何一种使用标记语言编写出来的文档,例如XML JavaScript中的GetElemrntById(),getElementsByTagName(),GetAttribute() 和 setAttribute()等方法,这些都是DOM

JQuery的Dom操作

大家好 又见面了 这次继续还是由我为大家带来JQuery的基础操作,这次的重点是在JQuery里使用DOM 示例如下: Prepend():在内容的前面插入新的标签,如下: 效果: prependTo():和上面的功能一模一样,也就是顺序上的区别 效果: After():标签后面添加新的元素 Before():在匹配元素的前面插入新的标签 删除节点 在JQuery里面,删除节点的方法大致3种:remove(),detach(),empty() Remove():从DOM里面删除所有匹配的元素 效