Jquery 目标是使用类找到的变量ID中的div

Jquery 目标是使用类找到的变量ID中的div,jquery,variables,indexing,jquery-selectors,Jquery,Variables,Indexing,Jquery Selectors,我需要向div“myId”中的几个元素添加各种ID、href和data parent属性,其中我希望返回具有给定类的div的ID:.template none.section accordion.accordion 这里的障碍是我使用的系统是拖放式的,因此这些元素将根据用户决定添加的数量而变化。每个元素的ID在放置时创建,但类保持不变 现在,这些元素是内联的,但经过检查,它们的索引似乎为-1,这意味着它们可能不会被视为列出的元素。我曾考虑过使用.sibling,但在实现上遇到了困难,因为在创建之

我需要向div“myId”中的几个元素添加各种ID、href和data parent属性,其中我希望返回具有给定类的div的ID:.template none.section accordion.accordion

这里的障碍是我使用的系统是拖放式的,因此这些元素将根据用户决定添加的数量而变化。每个元素的ID在放置时创建,但类保持不变

现在,这些元素是内联的,但经过检查,它们的索引似乎为-1,这意味着它们可能不会被视为列出的元素。我曾考虑过使用.sibling,但在实现上遇到了困难,因为在创建之前我不知道它的ID

我目前正在使用它,但是,我下面的jQuery只获取第一个项目的ID和索引,而不是单独设置每个实例的样式。我知道这可能是我错过的一件非常简单的事情

因此,总而言之,我希望实现:

使用类模板none.section accordion.accordion瞄准所有元素,并返回ID。 使用现在定位的变量ID,我希望将子元素.accordion、.accordion toggle和.accordion body作为目标来添加ID和元素。 确保template none.section accordion.accordion的每个实例相对于其父项或作为单个项进行样式设置,并将其应用于template none.section accordion.accordion的所有实例,而不是基于每个ID。 我希望这是有意义的,并且非常感谢你的意见

以下是我目前掌握的情况:

jQuery(window).load(function() {

    // sort accordions and add id's based on parents

    var index = jQuery( ".template-none section.section-accordion" ).index( this );

    var myId = jQuery(".template-none .section-accordion").prop("id");

    jQuery(".template-none .section-accordion .accordion").attr("id", myId + index)
    jQuery(".template-none .section-accordion .accordion-toggle").attr("data-parent", myId + index)

    jQuery(".template-none .section-accordion .accordion-body").attr("id", myId + index + 'body')
    jQuery(".template-none .section-accordion .accordion-toggle").attr("href", '#' + myId + index + 'body')

});
首先是问题:

您需要将每个部分作为当前上下文进行处理。此时,您的代码正在将文档传递到索引,因为这是DOM就绪的上下文。 您在以开头的节上有一个id,该id无效。 相反,迭代您的部分,例如使用每个部分,并修改相对于该部分的子元素,例如使用该部分中的find

例如:

jQuery(function ($) {
    // sort accordions and add id's based on parents
    var index = jQuery(".template-none section.section-accordion").each(function (index) {
        var myId = $(this).attr('id');
        $(this).find(".accordion").attr("id", myId + index);
        $(this).find(".accordion-toggle").attr("data-parent", myId + index).attr("href", '#' + myId + index + 'body');
        $(this).find(".accordion-body").attr("id", myId + index + 'body');
    });
});
要使用的JSFIDLE:

注:

jQueryfunction${…};是jQuerydocument.readyfunction{…}的便捷快捷方式;这还提供了一个本地$variable,因此您可以使用更短的标准jQuery代码。 尽管您在每个部分的子元素上生成唯一的ID,但是使用类通常会更好。
您是否有一个JSFIDLE来显示您的html标记?当阅读'dynamic'id'时,我首先想到事件委托。当页面加载中不存在div时,js中的直接选择器将不起作用,因为它会在页面加载时绑定。但是如果您将它包装在一个div中,并选择包装器,它就会工作。在这里阅读更多信息:很有趣,谢谢。我会看一看,然后回来汇报。我肯定能把标记贴出来。这就是我当前jQuery代码给出的结果。这两个ID不同的部分,但js基于第一个应用于这两个部分。下面可能会创建10个以上的项目,它们都需要动态地进行相同的处理。注意,返回的索引是-1。您的示例&JSFiddle不完整,例如,没有.template none,索引这没有意义,因为这是窗口对象。请提供HTML和jQuery的其余部分。@TrueBluaussie抱歉,试试这个:它不完整,因为第一个家伙只要求HTML,但我接受你的观点,这是毫无帮助的。我的问题是,显示在那里的“部分”可以由用户添加,因此我无法预测将有多少部分,这就是为什么我试图从类引用中提取ID并使用它。节ID是随机生成的。现在就欢呼吧。请注意,您的div嵌套缺少一些结束div。。。需要在JSFIDLE中使用干净的格式TidyUp按钮将有所帮助。非常感谢@TrueBlueAussie,非常感谢。我试过使用。每个选择器,但并没有考虑使用。查找,这很有意义。非常方便的提示。我很欣赏你关于使用类的第二个要点,但是开箱即用的引导手风琴的功能要求ID正确链接。您会很高兴地知道,这是伟大的工作与拖放现在: