【问题标题】:How can i get an array of all elements with a certain class added如何获得添加了某个类的所有元素的数组
【发布时间】:2015-02-28 22:34:33
【问题描述】:

这就是我想要做的事情: 目前我有一个标签列表,它会在点击时对数据库中的一些数据进行排序,有没有办法获取选择的元素列表?

<a href="javascript:;" class="tag tagId_4">Tag 4</a>
<a href="javascript:;" class="tag tagId_3">Tag 3</a>
<a href="javascript:;" class="tag tagId_2">Tag 2</a>
<a href="javascript:;" class="tag tagId_1">Tag 1</a>

这是目前所做的:

$('.tag').click(function(){
        var id = $(this).attr('class');
            id = id.substr(10);
        $(this).addClass('tag_selected');
    });

我怎样才能获得所有带有 tag_selected 类的链接的 id 列表?

【问题讨论】:

  • $('.tag_selected') 将返回元素集合。不清楚list 是什么意思。请多花点力气解释你的问题。根据显示的内容,您认为id 是什么?
  • 看,我有一些标签链接,这些标签有一个带有它们的 id 的类(标签 tagId_4,标签 tagId_3 等等)。当我点击一个链接时,我添加了一个名为'tag_selected'的类,我需要以某种方式存储所有具有类'tag_selected'的元素,然后我想从他们的类中获取他们的id(数组(4、3、2、1 )) 所以我可以使用 mysql 查询中的那些。
  • 我想得到一个包含这个类的所有元素的数组:那么$("a.tag_selected") 有什么问题?这将为您提供所有此类元素的 jQuery 集。

标签: jquery arrays select


【解决方案1】:

如果查询匹配多个元素,jQuery 选择器$() 将返回一个元素数组,所以:

$('.tag_selected');

将全部归还。

就您的实现设计而言,我会改用&lt;a&gt; 标记的实际id 属性来存储元素的id。

您可以使用类似的方法将每个选定元素的id 编号检索到数组中:

var ids = $('.tag_selected').map(function() {
  return $(this).attr('id').match(/.+_(.+)/)[1];
}).get();    

该正则表达式基本上会匹配直到下划线的任何内容,然后捕获下划线之后的任何内容并返回它。最后的[1] 正在访问match 函数返回的数组中的第二项(这是第一个捕获的字符串)。

【讨论】:

  • 感谢.attr('id').match(/.+_(.+)/)[1] 的事情,不知道 :)
  • 谢谢 :) 我已经更新了我的答案以返回你想要的(希望我没有测试它)。 match 代码用于我使用过的一些列表拖放库中,map() 比创建数组、循环元素和向数组中添加项目要简洁得多。 api.jquery.com/map
  • 如何获得 .map() 的结果?我现在正在尝试这段代码var ids = $('.tag_selected').map(function() { $(this).attr('id').match(/.+_(.+)/)[1]; }; console.log(ids);
  • 我更新了答案以在末尾包含.get(),它返回一个数组而不是一个 jQuery 集合。还注意到一个错字! (缺少括号)所以尝试更新的代码。
  • 仍然无法正常工作,添加缺少的括号并尝试警报(ID),得到一个空警报。
【解决方案2】:

我相信通过使用“$(.tag-selected).each(someFunction)”并让函数为包含该类的单个元素做一些事情。

【讨论】:

    【解决方案3】:
    function getListOfSelectedElements() {
        var list = [];
    
        $(".tag_selected").each(function (index,  element) {
            var id = $(element).attr("id");
            if (id) {
                list.push(id);
            }
        });
    
        return list;
    }
    

    【讨论】:

    • 为什么不使用.map()?而且,如果他想将其发送回服务器以供 MySQL 使用,这不考虑数字前面的 id 中的文本。
    • @Brendon Muir:标签表明需要基于 JQuery 的解决方案。例如:我不知道这是否需要在 IE 8 上工作,其中 Array.prototype.map 不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-11-23
    • 1970-01-01
    • 2011-10-11
    • 2013-12-28
    • 2020-05-10
    • 1970-01-01
    相关资源
    最近更新 更多