【问题标题】:Get closest parent with stated attribute?获得具有规定属性的最亲近的父母?
【发布时间】:2013-01-18 21:10:06
【问题描述】:

我有以下代码:

<input pid="hidVoteKey" type="hidden" value="0" />
    <ul id="mainPostList" class="verticalList">
        @foreach (var postViewModel in Model.Posts)
        {
            <li><div class="voteCon">...</div></li>
        }
    </ul>

然后我有一个 jquery,它使用类 voteCon 循环所有元素,然后尝试像这样获取父输入:

$(".voteCon").each(function () {
     InitVoteControl($(this), $(this).parent("input[pid='hidVoteKey']").val());
 });

问题是找不到隐藏域?

在这种情况下,voteCon 包含向上/向下按钮,并且这里绑定了一些 javascript 函数来进行 ajax 调用。同一个页面上会有多个类似上面的列表,但它们都有不同的 hidVoteKey。

【问题讨论】:

    标签: javascript jquery .net asp.net-mvc


    【解决方案1】:

    它找不到&lt;input&gt;,因为它不是&lt;div class="voteCon"&gt; 的父(或祖先)。它与&lt;ul&gt;(的兄弟姐妹)处于同一级别,后者是&lt;div&gt; 的祖先。你可以这样做:

    $(this).closest('ul').prev('input[pid="hidVoteKey"]').val()
    

    【讨论】:

    • 谢谢!这很好用,但问题是有时不会有 ul?有没有办法只找到具有 pid="hidVoteKey" 的 voteCon 元素的第一个父元素?
    • @Ivy 就像我说的,&lt;input&gt;&lt;div class="voteCon"&gt; 没有以这种方式链接。没有任何具有 pid="hidVoteKey".voteCon 元素的祖先(父级仅上升一级,因此不是正确的术语)。
    • 好的,所以我需要在上面的示例中的 ul 元素的顶部 voteCon 周围放置一个包装器,然后在建议的代码中使用这个包装器来获取 hidVoteKey?
    • @Ivy 这会起作用,尽管您想将.prev() 调用更改为.find()(或.children())。
    • 这是最好的解决方案吗?按照@ncn corp 的建议将字段更改为不隐藏会有所帮助吗?
    【解决方案2】:

    只使用 then 不输入 hidden ,你可以使用 inline style="display:none;"

    【讨论】:

      猜你喜欢
      • 2012-05-16
      • 1970-01-01
      • 2015-08-26
      • 2020-03-26
      • 2017-09-08
      • 1970-01-01
      • 1970-01-01
      • 2022-01-13
      • 1970-01-01
      相关资源
      最近更新 更多