Jquery 如何在另一个元素之前找到第一个元素

Jquery 如何在另一个元素之前找到第一个元素,jquery,Jquery,我需要得到一个元素的id,这个元素有无限的子元素的可能性。如果用户单击了这个(main元素)中的每个元素,那么我现在需要输入main元素的id,以便在该元素之前或之后插入一个新的div 范例 <div id="contentholder" data-ownid="100"> ... - add here a new div on click at each of the children from the main-element <div id="999" data-owni

我需要得到一个元素的id,这个元素有无限的子元素的可能性。如果用户单击了这个(main元素)中的每个元素,那么我现在需要输入main元素的id,以便在该元素之前或之后插入一个新的div

范例

<div id="contentholder" data-ownid="100">
...
- add here a new div on click at each of the children from the main-element
<div id="999" data-ownid="1">
This is the main-element
   <div id="a" data-ownid="2"></div>
   <div id="b" data-ownid="3"><div><span id="d" data-ownid="5"></span></div></div>
   <div id="c" data-ownid="4"><img id="f" data-ownid="6"...><span id="g" data-ownid="7"></span></div>
   <img id="h" data-ownid="8"...>
</div>
- or add here a new div on click at each of the children from the main-element
...
</div>

...
-单击主元素中的每个子元素,在此处添加一个新的div
这是主要因素
-或者单击主元素中的每个子元素,在此处添加一个新的div
...
我知道要添加新的div

$('#ID').before('<div>newdiv</div>');
$('ID')。在('newdiv')之前;

$('#ID')。在('newdiv')之后//格式化
重要的是要知道,div id=999不是最后一个父级。它也是之前未知数量元素的子元素。所以我的搜索必须在这个分区停止才能得到这个ID

也许这是一种查找id=contentholder的div之前的最后一个父级的方法? contentholder是此集合所有内容的最后一个父级

如何通过单击嵌套元素来获取主元素的ID


非常感谢。

如果所需元素具有
id
s,则可以使用
[id]
选择器

$(文档)。在('click','*:not([id])上,函数(e){
e、 停止传播();
console.log($(this).closest('[id]')).attr('id');
});

这是主要因素
跨度
跨度
跨度

如果所需元素具有
id
s,则可以使用
[id]
选择器

$(文档)。在('click','*:not([id])上,函数(e){
e、 停止传播();
console.log($(this).closest('[id]')).attr('id');
});

这是主要因素
跨度
跨度
跨度

我的建议是添加一些带有数据属性的标识符,例如
data parent=“999”
,然后在需要单击处理程序内部的位置使用单击处理程序使用
var$parent=$(this)获取父元素。最近(“[data parent]”)。然后,您可以获取有关该元素的任何信息,并使用
$('I`m a newly-generated element')。insertAfter($parent)

我的建议是添加一些带有数据属性的标识符,例如
data parent=“999”
,然后在需要单击处理程序内部的位置使用单击处理程序,使用
var$parent=$(this.closest(“[data parent]”)获取父元素。然后,您可以获取有关该元素的任何信息,并使用
$('I`m a newly-generated element')。insertAfter($parent)

在@Mohamed Yousef的建议下,我决定创建一个小的嵌套函数来循环元素直到结束

这不需要添加和删除新的数据属性,并且可以在包含所有类型元素的每个容器中工作

这是:

function get_first(element)
  {
        function is_parent(element)
        {
              if($(element).parent().attr('id') !='contentholder')
              {     return is_parent('#'+$(element).parent().attr('id'));                         
              }else{      return res=$(element).attr('data-editor-id');   }
        }            
        return is_parent(element);
  }

在@Mohamed Yousef的建议下,我决定创建一个小的嵌套函数来循环元素直到结束

这不需要添加和删除新的数据属性,并且可以在包含所有类型元素的每个容器中工作

这是:

function get_first(element)
  {
        function is_parent(element)
        {
              if($(element).parent().attr('id') !='contentholder')
              {     return is_parent('#'+$(element).parent().attr('id'));                         
              }else{      return res=$(element).attr('data-editor-id');   }
        }            
        return is_parent(element);
  }


$(this).closest('[id]').attr('id')
谢谢你的评论,但我不明白你的建议。我不知道[身份证]<代码>$(此).最近的('[id]').attr('id')
谢谢您的评论,但我不明白您的建议方式。我不知道[身份证]!?如果我正确理解了您的代码,那么它只在其他元素没有id属性的情况下工作。这是不对的,我更新了我的代码。是的@MikeR我明白了。。在这种情况下,您可以对所需元素使用
数据id
属性,然后使用
[data id]
而不是
[id]
。好的,但我要问的是,在“contentholder”之前,是否没有办法查找第一个元素,从单击的元素开始,然后向上移动?@MikeR给我一些时间来找到您想要的方法。。也许还有很长的路,但我会的see@MikeR回答更新如果我正确理解了代码,那么它只在其他元素没有id属性的情况下工作。这是不对的,我更新了我的代码。是的@MikeR我明白了。。在这种情况下,您可以对所需元素使用
数据id
属性,然后使用
[data id]
而不是
[id]
。好的,但我要问的是,在“contentholder”之前,是否没有办法查找第一个元素,从单击的元素开始,然后向上移动?@MikeR给我一些时间来找到您想要的方法。。也许还有很长的路,但我会的see@MikeR回答Updatedok,但我要问的是,在“contentholder”之前,是否没有办法查找第一个元素,从单击的元素开始并向上移动?您可以使用
$('#contentholder')。first()
,但如果你需要某些元素,我更喜欢更具体的解决方案。
$(“#contentholder”)。查找(“[data parent]”)。获取(0)
@vytsci标记他,通过键入
@
然后键入他的名字:)@Mohamed Yousef谢谢你的建议:我想人们还是会被注意到的。@vytsci是的,非常感谢,我发布了解决伊托克的方法,但是我要问的是,在“contentholder”之前,有没有办法从单击的元素开始查找第一个元素并向上移动?您可以使用
$('#contentholder').first()
,但如果您需要某些元素,我更喜欢更具体的解决方案。
$(“#contentholder”)。查找(“[data parent]”)。获取(0)
@vytsci通过键入
@
标记他以获得通知,然后键入他的名字:)@Mohamed Yousef感谢您的建议:D认为人们还是会被注意到的。@vytsci是的,非常感谢,我发布了解决方法