JQuery next().attr() 不工作

Posted

技术标签:

【中文标题】JQuery next().attr() 不工作【英文标题】:JQuery next().attr() not working 【发布时间】:2013-03-29 13:42:04 【问题描述】:

这是我的 JS 代码

var inputid = $("#"+parentId).next().attr('id');
var tdid = $("#"+inputid).next().attr('id');

这里的“parentId”是我函数中的一个参数。基本上 parentId 是 td 的 id,在 td 之后我有一个隐藏的文本字段,然后是另一个 td。

td->hiddenfiled->td

首先获取第一个 td 的 id,使用该 id 获取隐藏字段的 id,然后使用隐藏字段的 id 获取下一个 td 的 id。

这在除 IE 之外的所有浏览器中都可以正常工作。当我提醒它时,它给出了“未定义”。

这是我的html

<td id="tone_one" class="ttd_class class_tone"  style="border-left: 3px solid #000000; border-right: 3px solid #000000;" align=center valign=bottom bgcolor="#ffffff" >&nbsp;</td><input type="hidden" id="tone_one_txt" name="tone_one_txt">

<td id="tone_two" class="ttd_class class_ttwo"   style="border-left: 3px solid #000000; border-right: 3px solid #000000;" align=center valign=bottom bgcolor="#ffffff" >&nbsp;</td><input type="hidden" id="tone_two_txt" name="tone_two_txt">

我是 JQuery 的新手。请帮忙。

谢谢

【问题讨论】:

请包含您的 html。作为td 同级的隐藏文本字段无效。 您可以将选择器传递给next() 以跳过隐藏字段:$("#"+parentId).next('td').attr('id'); @jbabey:.next 不是这样工作的。如果你传递一个选择器,它会选择下一个兄弟只有当它匹配选择器。它不会选择与选择器匹配的下一个兄弟。 那是无效的标记。你不应该有&lt;td&gt;&lt;/td&gt;&lt;input /&gt;&lt;td&gt;&lt;/td&gt;。你能把隐藏的输入放在&lt;td&gt; 元素中吗? IE 正在正确修复 html,导致隐藏的输入被移到其他地方,因为它在那里无效。 【参考方案1】:

问题是您的 HTML 没有被 IE 正确解释。只需将隐藏的输入字段放在相同的td 中,然后尝试下面的代码。它适用于所有浏览器:

HTML

<table>
    <tr>
        <td id="tone_one" class="ttd_class class_tone"  style="border-left: 3px solid #000000; border-right: 3px solid #000000;" align=center valign=bottom bgcolor="#ffffff">&nbsp;
            <input type="hidden" id="tone_one_txt" name="tone_one_txt">
        </td>
        <td id="tone_two" class="ttd_class class_ttwo"  style="border-left: 3px solid #000000; border-right: 3px solid #000000;" align=center valign=bottom bgcolor="#ffffff">&nbsp;
            <input type="hidden" id="tone_two_txt" name="tone_two_txt">
        </td>
    </tr>
</table>

JS

var inputid = $("#"+parentId).children().attr('id');
var tdid = $("#"+inputid).closest('td').next().attr('id');

【讨论】:

【参考方案2】:

这样使用。

var inputid = $("#parentId").next().attr('id');

【讨论】:

为什么.next 函数会有一个属性attr?这是完全错误的。 $("#parentId").next.attr 不存在! .next 是一个函数:api.jquery.com/next 阅读如何使用.next() 方法(注意括号)api.jquery.com/next 现在您已将其更改为函数调用,您发布了 OP 已经使用的内容,但对他不起作用。 “我们不能这样使用吗?” 嗯,你最初不是这样发布的。你错过了() 但是为什么呢?也许变量 parentId 包含实际 ID。你在这里只是做假设。正如您在 OP 发布的 HTML 中看到的那样,表格单元格的 ID 是 tone_ontone_two,而不是 parentId

以上是关于JQuery next().attr() 不工作的主要内容,如果未能解决你的问题,请参考以下文章

jQuery 手风琴效果

jQuery“ $ variable”与javascript“ var” 简单变量声明的困惑

jquery--常用方法

重剑无锋,大巧不工

jQuery中.attr和.data的区别分析

jquery不能获取多个attr值问题