使用jQuery在一个元素和一个祖先之间选择元素的最佳方法是什么

时间:2013-05-23 20:11:25

标签: javascript jquery

我有一系列嵌套表(假设我无法改变结构),我需要选择最外面的td。

测试HTML

<table>
    <tr>
        <td>
            <table class="relevanttable">
                <tr>
                    <td>one</td>
                    <td>two</td>
                    <td>
                        the important td
                        <table>
                            <tr>
                                <td>three - one</td>
                                <td>three - two <input id="targetinput" /></td>
                            </tr>
                        </table>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
</table>

JS:

var relevant_field = $('#targetinput');
var target_table = relevant_field.closest('.relevanttable');
// I want something like this
var important_cell = last_selected.closest('.relevanttable > tr > td');

我想我可以通过related_field.parentsUntil('。tableanswer','td')完成这项工作,然后确定哪个项目离它最远,但我想知道是否有更好的方法可以立即攻击它选择我感兴趣的确切td。这是一个简单的例子,但可能有多个表彼此嵌套,最外面的表可能不是我关注的那个。

响应前几条评论/答案进行更新:

$('#targetInput').parents('td').last()

不太正确,因为可能比我的示例中显示的嵌套更多。那是表&gt;表&gt; table.relevanttable(这个不重要,只有最接近)&gt; table.relevanttable&gt;表&gt;表&gt; ...&gt; TD

此外,为了提供一些上下文,数据将基于用户交互写入表中。由于它是用户交互,因此无法事先知道什么是重要的。 table.relevanttable中可能有table.relevanttable,但只应使用最接近的table.relevanttable。可以想象将数据粘贴到Excel中,除了一些excel单元格包含整个工作表。它的Excel符合Inception。

2 个答案:

答案 0 :(得分:1)

你实际上可以做一些与你的例子非常相似的事情。您只需考虑浏览器将添加tbody是否添加一个。

$('#targetinput').closest('.relevanttable > tbody > tr > td');

http://jsfiddle.net/d7Zqf/1/

我无法找到一个可靠的来源,提到哪些浏览器会添加tbody。我希望所有现代浏览器都可以。我测试了IE9和当前的FF。

答案 1 :(得分:0)

我个人建议,虽然尚未经过测试:

$('#relevant_field').parents('td').last();

参考文献: