Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery选择器_Jquery_Jquery Selectors - Fatal编程技术网

jQuery选择器

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></

我有一个相当简单的动态html表结构,它包含链接,并且可能包含第二个带有链接的表。我想更改主表中链接的html属性,但不想更改第二个表中的链接

我的结构:

<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')