zoukankan      html  css  js  c++  java
  • jQuery 中让我误解的那些方法

    至今我都不能说把 jQuery 中的方法在实践中都用了一遍,

    一部分是用不到,一部分则是我未能体会它的魅力,

    所以今天就来收录一下,那些从我们之间溜走的美丽。

    $.fn.add()

    一开始对它的理解就是 $("p").add("span") 等同于 $("p, span") 而已,

    而其实不然,$.fn.add() 更多的用在链式结构上,看两个例子就懂了。

    // 不但克隆 p,还在加上一个 span
    $("p").clone().add("<span>Again</span>").appendTo(document.body);
    // 所有的 div 加上边框和背景,p 也跟着加了个背景
    $("div").css("border", "2px solid red").add("p").css("background", "yellow");
    

    $.queue() 和 $.dequeue()

    这个和 $.fn.queue() 并不一样哟,$.queue() 不只能运用在 jquery 动画当中,乃至可以方便地改变运行顺序/延时等。

    这是个非常 nice 的方法,但我想以后再细讲,那样就可以又多一篇文章了,哈,✧٩(ˊωˋ*)و✧

    $.fn.remove() / $.fn.detach() / $.fn.empty()

    官方文档就给出了很好的解释,

    $.fn.detach() 与 $.fn.remove() 不同的是,所有绑定的事件、附加的数据等都会保留下来。

    而 $.fn.empty() 则是清空所有子节点,与 dom.innerHTML = "" 和 $.fn.html("") 相比更彻底,还删掉了 cache 和事件,后两者明显简单粗暴得多。

    $.fn.attr() 和 $.fn.prop()

    这个错误可以说伴随了我好几年,实在惭愧...

    显然设置那些“本土”属性,$.fn.prop() 实在好太多了,当初寻找为什么设了 selected 还是显示第一项着实急死人。

    // $.fn.prop() 适用于 HTML 元素本身就带有的固有属性的处理
    $("#chk1").prop("checked") == false
    $("#chk2").prop("checked") == true
    // $.fn.attr() 就更适合你瞎搞了 $("#chk1").attr("checked") == undefined $("#chk2").attr("checked") == "checked"

      

    $.fn.closest() 和 $.fn.parents()

    官方文档如斯说: $.fn.closest() 和 $.fn.parents() 的主要区别是:1,前者从当前元素开始匹配寻找,后者从父元素开始匹配寻找;2,前者逐级向上查找,直到发现匹配的元素后就停止了,后者一直向上查找直到根元素,然后把这些元素放进一个临时集合中,再用给定的选择器表达式去过滤;3,前者返回0或1个元素,后者可能包含0个,1个,或者多个元素。

    // 使用 $.fn.closest() 可以很好地避免想点的是 li 结果 e.target 是子级 a 的情况哟
    $("li").on("click",function(e){
      console.log(e.target);
      console.log($(e.target).closest("li"));
    });
    

      

    再来点小玩意儿:

    $.when().then() 可以轻松解决回调,就是回调后的参数烦了点

    $.when($.ajax("/page1.php"), $.ajax("/page2.php")) .then(myFunc, myFailure);
    

    操作 iframe 里的元素,但这得 iframe 加载完才行,但如何检测它是否加载完成博主就不知道了,求指教

    $(window).on("click",function(){
      $("iframe").contents().find("body").html("I'm in an iframe!");
    });
    

    补充,后来检测 iframe 加载完成的方法还是找到了,但感觉并不好,但还是先分享出来吧

    <iframe id="iframe" data-src="http://www.baidu.com"></iframe> 
    
    $.fn.iframeLoaded = function(callback) {
      return this.each(function(){
        iframeLoaded(this, callback);
      });
    };
    function iframeLoaded(elem, callback) {  
        iframe = typeof elem === "string" ? document.querySelector(elem) : elem;
        iframe.src = iframe.getAttribute("data-src");
        iframe.onload = iframe.onreadystatechange = function() {
            if (!iframe.readyState || iframe.readyState == "complete") {
                if (callback) callback();
            }
        }
    }
    $("iframe").iframeLoaded(function(){
        alert("ok");
    })
    

      

  • 相关阅读:
    低调做人
    《论语》中发现的问题
    Magic
    雨中游桃花岛
    说完足球说篮球
    转发一个小游戏:看看自己像哪位名人?
    发几个脑筋急转弯题
    Cynthia 终于决定做SOHO
    我家楼上的故事
    上班苦于不能上msn、qq的朋友们有福了
  • 原文地址:https://www.cnblogs.com/foreverZ/p/5900256.html
Copyright © 2011-2022 走看看