【问题标题】:How to find previous element from $(this)?如何从 $(this) 中找到前一个元素?
【发布时间】:2011-07-23 19:20:16
【问题描述】:

点击 .bigadminbutton 时如何获取 $(.subname) 的值 - 函数 updateSub()。尝试了一切(prev、sibling、parent、children、find...的所有组合)但没有任何成功。我在这个简单的事情上浪费了太多时间。

<div class='subdiv'>
     <input type='text' class='subname' value='Prva' />
     <a class="bigAdminButton"  href="#" onclick="updateSub()">
        <span class="bigAdminButtonText adminButtonText btnFix">Update</span>
     </a>
</div>

【问题讨论】:

  • 忘了告诉我,我有很多 .subdiv 和很多 bigadminbuttons...所以 $('subname').val() 不适用于这个...跨度>

标签: javascript jquery jquery-selectors selector


【解决方案1】:

我想我不确定为什么.prev() 不起作用。似乎在这里:

function updateSub (el) {
    alert(el.prev('input.subname').val());
}

http://jsfiddle.net/UQBrp/

哎呀。忘了提到我正在将$(this) 传递给函数。

<div>
  <input type='text' class='subname' value='Prva0' />
  <div class='subdiv'>
     <input type='text' class='subname' value='Prva1' />
     <a class="bigAdminButton"  href="#" onclick="updateSub($(this))">
        <span class="bigAdminButtonText adminButtonText btnFix">Update</span>
     </a>
  </div>
  <div class='subdiv'>
     <input type='text' class='subname' value='Prva2' />
     <a class="bigAdminButton"  href="#" onclick="updateSub($(this))">
        <span class="bigAdminButtonText adminButtonText btnFix">Update</span>
     </a>
  </div>
  <div class='subdiv'>
     <input type='text' class='subname' value='Prva3' />
     <a class="bigAdminButton"  href="#" onclick="updateSub($(this))">
        <span class="bigAdminButtonText adminButtonText btnFix">Update</span>
     </a>
  </div>
  <div class='subdiv'>
     <input type='text' class='subname' value='Prva4' />
     <a class="bigAdminButton"  href="#" onclick="updateSub($(this))">
        <span class="bigAdminButtonText adminButtonText btnFix">Update</span>
     </a>
  </div>
</div>

http://jsfiddle.net/UQBrp/1/

只需将this 传递给updateSub() 函数,并在函数中使用$()

function updateSub (el) {
    alert($(el).prev('input.subname').val());
}

http://jsfiddle.net/UQBrp/3/

【讨论】:

  • 是的,prev() 绝对可以根据 OP 指定的标记和目标工作。不知道混乱在哪里......
  • 各有各的。问题是如何找到相邻的前一个元素,而不是关于 onclick 最佳实践的争论。我怎么知道 OP 没有继承具有大量内联事件处理程序的庞大代码库,并且即使我对它们大肆宣扬,也不会费心替换它们?
【解决方案2】:

我更改了您的代码,因此您不必使用 onclick 来传递参数。一般来说,使用纯事件处理程序并将其与 jQuery 混合并不是一个好主意。 jQuery 确保您获得最佳的跨浏览器事件处理。注意 data-id 元素。除了使用 onclick 处理程序来传递信息,您可以在 html 标记上声明一个“data-*”属性以将元数据信息附加到它,然后从 jQuery 事件处理程序中访问该信息。

<div class='subdiv'>
     <input type='text' class='subname' value='Prva' />
     <a class="bigAdminButton"  href="#" data-id="1">
        <span class="bigAdminButtonText adminButtonText btnFix">Update</span>
     </a>
</div>

那么事件处理器就可以得到id如下:

$("a.bigAdminButton").click(function () {    
     var id = $(this).attr('data-id');
     alert(id + ": " + $(this).siblings('.subname').val());
});

jsFiddle 链接:http://jsfiddle.net/cgencer/eU8d9/9/

您也可以在上面的代码中使用$(this).prev(),但这更敏感,以防您在两者之间添加另一个元素或更改元素的顺序。

【讨论】:

  • jsfiddle.net/eU8d9/4 我需要这样,因为我需要传递参数...但不知何故它不起作用...我已经尝试过很多次但没有...
  • @user855705,我用不同的方法更新了答案,让你传递参数。
  • 你是王者!!!我错过了文件。准备好了,这就是为什么我没有收到任何警报!!!谢谢大家!
  • @user855705,你可以把你的代码放在 $(function () { //your code });作为捷径。祝你好运! :)
【解决方案3】:

我真的不明白您为什么将 jQuery 与 javascript 混为一谈。如果您使用 jQuery,那么就一直使用 jQuery。你为什么要使用“onclick”,而你可以这样做:

$('.bigAdminButton').click(function(){
    var x = $(this).prev('.subname').val();
    alert(x);//"Prva"
})

上面的例子在 js fiddle 中工作得很好。 here is the link。不要把所有东西都混在一起来迷惑自己。希望对您有所帮助。

【讨论】:

    【解决方案4】:
    $('a.bigAdminButton').live('点击', function () { alert($('input.subname').val()); });

    如果这是重复使用这些类的代码块,您可以使用:

    $('a.bigAdminButton').live('点击', function () { alert($(this).parent().find('input').val()); });

    【讨论】:

    【解决方案5】:
    $("a.bigAdminButton").click(function() {
        var subnameValue = $(".subname", $(this).parent()).val();
        // (rest of your function)
    });
    

    【讨论】:

    • 可能有多个带有 .subname 的元素
    • 点。通过在链接的父级上下文中评估选择器来更正。
    • 如果证明按类访问元素很麻烦,您可能需要考虑更好的方法来识别您的标记元素。比如使用明确的ids。
    【解决方案6】:
    alert($(this).parent().closest('.subname').val());
    

    【讨论】:

    • .bigAdminButton 的父级不是 div 而不是输入吗?
    • 我认为这也行不通:它会找到直接的父元素,然后在 DOM 上找到最接近的元素,类为 subname...
    • 是的,这意味着
    猜你喜欢
    • 2020-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 2013-10-22
    • 2021-04-14
    相关资源
    最近更新 更多