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");
})

  

原文地址:https://www.cnblogs.com/foreverZ/p/5900256.html