在jQuery中向后匹配元素的第一个匹配项

在jQuery中向后匹配元素的第一个匹配项,jquery,dom,jquery-selectors,Jquery,Dom,Jquery Selectors,我有一页有一些表格。提交时,我希望匹配向后搜索表单的第一个元素(即段落)。比如说 在提交的#firstform中,我希望匹配 #第二段 关于#第二个表单提交,我想匹配 #第三段图形 其他段落 第一要素 第二要素 其他段落 其他段落 是否可以创建一个向后搜索并在第一次匹配时停止的jQuery函数?您可以这样做: var p = $(this).parents().addBack().prevAll().find('p').addBack('p').last(); 这样做的目的是收

我有一页有一些表格。提交时,我希望匹配向后搜索表单的第一个元素(即段落)。比如说

  • 在提交的
    #firstform
    中,我希望匹配
    #第二段
  • 关于
    #第二个表单
    提交,我想匹配
    #第三段图形


其他段落

  • 第一要素
  • 第二要素

其他段落

其他段落

是否可以创建一个向后搜索并在第一次匹配时停止的jQuery函数?

您可以这样做:

var p = $(this).parents().addBack().prevAll().find('p').addBack('p').last();

这样做的目的是收集所有家长以前的兄弟姐妹,并在这个(大)集合中搜索最后一段。

您可以这样做:

var p = $(this).parents().addBack().prevAll().find('p').addBack('p').last();


这样做的目的是从所有父级的上一个同级中创建一个集合,并搜索此(大)集合中的最后一段。

如果您只是查找(type)的最后一个元素,则您将查找
:last
选择器。它与元素的最后一次出现相匹配。所以

$("p:last")
将得到最后一段

然而,按照我的理解,如果您希望在另一个元素之前获取最后一个元素(在您的示例中,单击提交按钮),那么还有几天的时间。我会用像这样的东西

$(myElement).prevAll('p:first');
您使用了一个类似的选择器,但现在它只影响提交元素(或您想要使用的任何元素)之前的DOM元素。使用
:first
而不是
:last
,因为
prevAll()
以相反的顺序获取元素列表


如果您只是在查找(type)的最后一个元素,那么您要查找的就是
:last
选择器。它与元素的最后一次出现相匹配。所以

$("p:last")
将得到最后一段

然而,按照我的理解,如果您希望在另一个元素之前获取最后一个元素(在您的示例中,单击提交按钮),那么还有几天的时间。我会用像这样的东西

$(myElement).prevAll('p:first');
您使用了一个类似的选择器,但现在它只影响提交元素(或您想要使用的任何元素)之前的DOM元素。使用
:first
而不是
:last
,因为
prevAll()
以相反的顺序获取元素列表


我认为jQuery按照我们读取代码的顺序遍历元素,因此您可以尝试此代码,在演示中,我甚至添加了一些嵌套的
p
元素,但这可能不是您的情况。这适用于您拥有的任何HTML结构:

var token = 'abd432432efdfsdfe42342398kjkfljsdlkfjs';
$('input').click(function(e){
  $(this).wrap($("<p>").attr('id',token));
  var p;
  $('p[id]').each(function(i){        
    if($(this).attr('id') == token) return false;        
    p = $(this);
  });
  $(this).unwrap();
  //try showing the id of the matched p element
  alert(p.attr('id'));
  e.preventDefault();
});
var令牌='abd432432efdfdfe423498kjkfljsdlkfjs';
$(“输入”)。单击(函数(e){
$(this.wrap($(“”).attr('id',token));
var-p;
$('p[id]')。每个(函数(i){
if($(this).attr('id')==令牌)返回false;
p=$(本);
});
$(this.unwrap();
//尝试显示匹配的p元素的id
警报(p.attr('id'));
e、 预防默认值();
});

我们应该只搜索具有
id
属性(或其他符号)的
p
元素,因为浏览器有时会插入一些空的
p
元素,因此会产生意外的结果。

我认为jQuery会按照我们读取代码的顺序遍历元素,因此您可以在演示中尝试此代码,我甚至添加了一些嵌套的
p
元素,但这可能不是您的情况。这适用于您拥有的任何HTML结构:

var token = 'abd432432efdfsdfe42342398kjkfljsdlkfjs';
$('input').click(function(e){
  $(this).wrap($("<p>").attr('id',token));
  var p;
  $('p[id]').each(function(i){        
    if($(this).attr('id') == token) return false;        
    p = $(this);
  });
  $(this).unwrap();
  //try showing the id of the matched p element
  alert(p.attr('id'));
  e.preventDefault();
});
var令牌='abd432432efdfdfe423498kjkfljsdlkfjs';
$(“输入”)。单击(函数(e){
$(this.wrap($(“”).attr('id',token));
var-p;
$('p[id]')。每个(函数(i){
if($(this).attr('id')==令牌)返回false;
p=$(本);
});
$(this.unwrap();
//尝试显示匹配的p元素的id
警报(p.attr('id'));
e、 预防默认值();
});

我们应该只搜索具有
id
属性(或其他符号)的
p
元素因为浏览器有时会插入一些空的
p
元素,因此会产生意外的结果。

这不是一个需要解决的小问题,因为您需要递归地查看表单的同级元素以查找所需的
p
标记。您是否可以发布您试图自己编写的代码来解决此问题。是否必须有
?这使代码变得更加困难。如果
不在那里,它将像
$('form')一样简单这在很大程度上取决于HTML结构,在一般情况下,我认为代码并不简单。@RoryMcCrossan:事实上,我对可能的代码一无所知。我发现了一些jQuery函数,如prevAll或reverse,但它们似乎都只在兄弟节点上搜索。我完全意识到这不是一个小问题,因为我希望找到第一个独立于HTML结构的出现。我知道这是一个非常普遍的问题,因此非常困难。这个问题的用例是什么?为什么你的结构如此随机?这不是一个小问题,因为你需要递归地查看表单的同级元素来寻找所需的
p
标记。您是否可以发布您试图自己编写的代码来解决此问题。是否必须有
?这使代码变得更加困难。如果
不在那里,它将像
$('form')一样简单这在很大程度上取决于HTML结构,在一般情况下,我认为代码并不简单。@RoryMcCrossan:事实上,我对可能的代码一无所知。我发现了一些jQuery函数,如prevAll或reverse,但它们似乎都只在兄弟节点上搜索。我完全是骗子