map() get() 混淆

2024-03-11

我刚刚浏览了 jQuery API,我有点困惑map() & get()方法。我知道我错了但是map()方法看起来很像.each()陈述?除了文档说它返回一个新的 jQuery 对象。

我一直在 jsfiddle 上玩这个,试图弄清楚它,但我还不太明白。here http://jsfiddle.net/BnP45/是jsfiddle链接:

这也是代码片段:

$.fn.equalizeHeights = function() {
    var two = $(this).map(function(i, e) {
                                return $(e).height();
                            });
    console.log(two);
    console.log(two.constructor);
    console.log(two.get());
    console.log(two.get().constructor);
    return this.height(Math.max.apply(this,two.get()));
}
$('input').click(function() {
    $('div').equalizeHeights();
});

我看到他们正在使用原型扩展 jQuery 来创建一个名为equalizeHeights(). And $(this)表示页面上所有“div”元素的选择器。这map()call 迭代 div 数组中的每个项目并返回其高度?但我感到困惑的是我正在控制台上记录的内容。 一个是一个object另一个是array?

有人可以详细说明一下吗map() and get()这段代码在做什么?

提前致谢。


基础知识

有两种不同的 jQuerymap()功能:.map() http://api.jquery.com/map, and $.map() http://api.jquery.com/jQuery.map。他们执行类似的操作,但针对不同的集合。您使用的是第一个表单,它执行以下操作:

  1. 迭代调用该函数的 jQuery 对象(集合,无论什么)。在这种情况下,那就是$(this),无论是.equalizeHeights()函数被调用于...这是$('div'): all <div>页面上的元素(唷)。
  2. Create an array with the same number of elements as the object that .map() was invoked on (all divs on the page, remember) whose nth element is generated by invoking the provided callback - I'll get there in a sec - on the nth element in the targeted jQuery object. In this particular case, that callback is this function:

    function(i, e) { return $(e).height(); }

Yes, .map()看起来确实像.each(),但有一个关键的区别:

  • .each()对集合中的每个元素执行操作;回调的返回值传递给.each()用于判断是否继续迭代。
  • .map()还对集合中的每个元素执行操作,但回调的返回值用于在返回的类数组对象中生成一个元素.map().

你还在吗?

jQuery 对象类似于数组,但它们不是数组!你打电话的原因.get()在结束时.map()调用的目的是将 jQuery 对象转换为真正的数组。该数组的元素是回调返回的值。

把它们放在一起

该函数设置每个单个的高度<div>在页面上达到最高的高度<div>。就是这样:

$('input').click(function() {   // bind a click listener to every <input> element
    $('div').equalizeHeights(); // ...that will call the equalizeHeights() fn
                                //    on all <div> elements when fired
});

所以,向内看equalizeHeights()定义:

$.fn.equalizeHeights = function() {
    // construct an array that contains the height of every <div> element
    var two = $(this).map(function(i, e) {
                                return $(e).height();
                          });


    return this.height(    // set the height of element <div> element to...
        Math.max.apply(    // the largest value in...
            this,two.get() // the array of height values
        )
    ); // ...and finally, return the original jQuery object to enable chaining
}

但那又怎样呢constructor商业?

正如你发现的那样,yes,一个是对象(jQuery 对象),另一个是数组。这就是为什么你需要它.get()调用将类似数组的对象转换为Math.max()可以理解。

而不是看着constructor属性,您可以使用更多 jQuery 来弄清楚您正在查看的内容:

console.log(two.jquery);         // the version of jquery, something like "1.4.4"
console.log($.isArray(two));     // is it a plain old JS array? false
console.log(two.get().jquery);   // undefined! it's just an array.
console.log($.isArray(two.get()));    // true

更好的是查看调试器内部的实际对象,而不仅仅是console.log()-他们。这样,您就可以看到整个对象图、它的所有属性等。

任何问题?评论走开。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

map() get() 混淆 的相关文章

  • 使用 jQuery 修改 svg 文件

    我有一个 svg 文件 其中包含一些形状和一些文本 我想在运行时修改 svg 以便某些形状可以更改颜色 某些文本可以更改其内容 假设我的外部 svg 文件中只有两个元素 圆圈 1 具有该 id 的蓝色实心圆圈 text1 包含该 id 的
  • 从 jQuery 事件访问函数中的参数*和*事件

    这是我不久前问的另一个问题的后续问题 通常 您可以从 jQuery 事件的函数调用中访问事件 如下所示 item live click functionToCall 并在函数中 function functionToCall ev do s
  • “过滤”JSON 以获得唯一键并获取所有相关值

    找到一个组中所有可能的相关值的最佳方法是什么 var table group a stuff new group a stuff old group b stuff newOld group b stuff old group c stuf
  • asp.net mvc - Ajax 刷新视图的每个元素

    希望在退出 jquery 对话框后使用 ajax 刷新当前页面 我有一个包含 foreach 循环的视图 数据是从模型中提取的 每个循环有 2 个编辑 删除按钮 当我单击 编辑按钮 时 将打开一个 jquery UI 对话框进行编辑 当我保
  • 猫头鹰轮播,制作自定义导航

    所以我有一个包含三张图像的猫头鹰旋转木马 我还在左侧和右侧添加了自定义导航箭头 png 图像 然而 这些箭头目前是无用的 因为我找不到一种方法来真正让它们在我的猫头鹰旋转木马的图像之间切换 我无休止地寻找 找不到解决方案 有任何想法吗 您需
  • 通过 AJAX jquery 更改表格背景颜色?

    设想 当我的网页加载时 自动搜索单元格已由用户输入并且具有价值 如果已输入 表格背景颜色将为红色 否则为绿色 假设该表尚未输入 桌子背景绿色是这样的 和表的源代码 table width 1023 height 200 border 1 t
  • jqgrid editoptions:必需的不起作用

    好吧 不确定我在这里做错了什么 list jqGrid url URL datatype json mtype GET colModel label Index index Index key true hidden true label
  • jQuery:如何检查一个元素是否是最后一个同级元素?

    如何检查一个元素是否是最后一个兄弟元素 对于连续的最后一个单元格 我想执行不同的操作 这不起作用 td each function var this this if this this parent last td alert 123 如果
  • jquery hasClass,是否可以给出类名的开头,以获取完整的类名

    我正在尝试做类似的事情这个问题 https stackoverflow com questions 10333210 how can i get the class name as a string that begins with tes
  • jquery 查找下一个带有类的元素

    我试图找到下一个具有 错误 类别的元素并碰壁 在查看 jQuery 网站上的演示时 这应该可以工作 但事实并非如此 button disabled next text this button is disabled div div
  • 在 Django 中处理 ajax json 对象 - 'QueryDict' 对象没有属性 'read' 错误

    我正在尝试解析 Django 视图中的 json 对象 该对象已通过 ajax 通过 post 方法从客户端传递过来 JS post update vendor merchandise types JSON stringify json o
  • 如何绑定到仅检查复选框?

    我有一个复选框 我正在使用 jquery 我想在用户选中复选框时弹出一个对话框 但是 如果他们取消选中该框 则不会弹出任何内容 我怎样才能做到这一点 另外 我需要使用 jquery live 或 livequery 因为页面加载时不会显示复
  • 从三行菜单到十字菜单的动画变换

    我有一个三行动画菜单 当您单击它时 它会切换为十字 首先 您会看到三条线变成一条线 然后切换到十字线 但我想跳过从三行到一行的步骤 我怎样才能做到这一点 这是小提琴http jsfiddle net adyocsm9 http jsfidd
  • 使用ajax发送表单数据

    我想用 ajax 以表单形式发送所有输入 我有一个这样的表单
  • 为什么 (jQuery) Waypoints“视图底部”不适用于隐藏元素?

    我试图使用 jQuery 和 Waypoints 以前称为 jQuery Waypoints 在用户向下滚动时动态显示隐藏的图像 我发现我可以很容易地向元素添加一个路径点 并在元素 在视图中 时触发处理程序 偏移属性设置在视图底部 但是 尝
  • 使用 jQuery live() 初始化插件?

    使用 jQuery 在特定类的所有当前和未来元素上自动初始化插件的最佳方法是什么 例如 假设我想要全部
  • 如何从 jquery .load 获取 php 响应

    例如我给出另一个代码 这是我的 some3 php 代码 第一个文件
  • 数据表 - 从 AJAX 源过滤数据

    我有一个数据表 正在从 api 获取数据 现在我的状态是活动的 非活动的 如果标志是活动的 那么我需要在数据表中显示 否则我不应该显示过期的 这是我的fiddle https jsfiddle net lakshmipriya001 qLp
  • 使用 jQuery 获取 JSON Facebook Graph API 用户信息

    我正在尝试使用图形 API 来获取有关用户的一些基本信息 无需用户授权 只需获取公共详细信息 我正在尝试使用 jQuery 和 getJSON 来获取数据并解析它 但我很难弄清楚如何访问我想要的键值对 我想要有类似的东西 var fburl
  • 更改 jQuery UI 选项卡的选定选项卡

    这个问题之前已经被问过几次了 但没有一个与我的情况相似 我有 jQuery Tabs 控件 可以通过 ajax 加载我的选项卡 div ul li a href gt Information a li ul div

随机推荐