jQuery选择器
我有一个相当简单的动态html表结构,它包含链接,并且可能包含第二个带有链接的表。我想更改主表中链接的html属性,但不想更改第二个表中的链接 我的结构:jQuery选择器,jquery,jquery-selectors,Jquery,Jquery Selectors,我有一个相当简单的动态html表结构,它包含链接,并且可能包含第二个带有链接的表。我想更改主表中链接的html属性,但不想更改第二个表中的链接 我的结构: <table> <tr><td><a href="www.google.com">link</a></td></tr> <tr><td><a href="www.google.com">link</a></
<table>
<tr><td><a href="www.google.com">link</a></td></tr>
<tr><td><a href="www.google.com">link</a></td></tr>
<tr><td><a href="www.google.com">link</a></td></tr>
<tr><td><a href="www.google.com">link</a></td></tr>
<tr><td><a href="www.google.com">link</a></td></tr>
<tr>
<td>
<table>
<tr><td><a href="http://stackoverflow.com">link</a></td></tr>
<tr><td><a href="http://stackoverflow.com">link</a></td></tr>
<tr><td><a href="http://stackoverflow.com">link</a></td></tr>
</table>
</td>
</tr>
例如,我想把“www.google.com”的所有HREF改为“www.foo.com”。我可以更改href属性,但我的选择器b/c有问题,有时第二个表不存在
我当前的选择器看起来像:$('table a')。过滤器(':not(table:last a))
我相信这不是最有效的方法,但它一直在发挥作用,直到没有第二张桌子的可能性出现 如果您的“主”表不在另一个表中,您可以执行以下操作:
$('table a:not(table table a)')
或相当于:
$('table a').not('table table a')
更新:从性能角度来看,它要好得多。您可以使用表的容器。
如果是身体: $(“正文>表格>tr>td>a”) 尝试使用并为主表提供一个ID(如果它还没有ID): 其中
#maintable
是主表的ID
编辑:您还需要将
标记添加到表中(出于注释中指出的原因)
这在较新的浏览器上使用基本的CSS选择器,并且不需要任何jQuery魔术,除非您使用的是较旧的浏览器。我想我更愿意这样做:
$('table').slice( 0, -1 ).find( 'a' );
找到所有表,然后将集合减少到最后一个以外的所有表,最后对
元素执行.Find()
原因是我非常倾向于使用有效的CSS选择器,这样jQuery就可以成功地使用
querySelectorAll
。如果可以更改动态生成的HTML,那么应该为每个表指定一个ID属性:
<table id="table1"> ...
<table id="table2"> ...
</table>
</table>
这并不能真正回答您的问题,但这种设计更易于维护和更改。如何访问第一个表,是否有可以使用的ID或绝对引用?是的,在选择器中使用
应该很容易,以防止向下遍历树超出预期。@Felix:刚刚更新解释了原因。:first
选择器适用于无效CSS选择器类别。如果只有两张桌子的话,我明白了。只是觉得它看起来更好;)但你是对的。。。谢谢你的解释。@Felix:同意,在这种情况下,:first
可能是一个值得的折衷方案。在使用
元素时要小心。即使没有
,大多数浏览器都会插入一个,这会导致选择器失败。@patrick dw:说得好。在这种情况下,可以显式地添加一个
,这样您就可以确定它在那里,然后选择器将更改为:$(“#maintable>tbody>tr>td>a”)
是的,我完全赞成显式地包含
,以确保浏览器之间的一致性。谢谢大家给出的好答案。我要接受这个。它起作用了,我不知道是谁先回答你还是下面的伊里戈先生。此外,性能永远不会成为问题,因为它是动态生成的,行数永远不会超过25。
<table id="table1"> ...
<table id="table2"> ...
</table>
</table>
$('#table1').find('a')