jQuery 选择器

发布于 2024-10-10 08:05:38 字数 1233 浏览 2 评论 0原文

我有一个相当简单的动态 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”的所有hrefs更改为“www.foo.com”。我可以更改 href 属性,但我的选择器有问题,因为有时第二个表不存在。

我当前的选择器如下所示: $('table a').filter(':not(table:last a)')

我确信这不是最有效的方法,但是它一直工作到没有第二张桌子发挥作用的可能性为止。

I have a fairly simple dynamic html structure of a table that contains links and the possibility that it will contain a second table with links. I would like the change the html attribute for the links in the main table but not in the second.

My structure:

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

So for example, I would like to change all the hrefs of "www.google.com" to "www.foo.com". I am able to change the href attribute, but I am having issues with my selector b/c there are times where the second table will not exist.

My current selector looks like: $('table a').filter(':not(table:last a)')

I'm sure it is not the most effecient way to do it, but it was working till the possibility of no second table came into play.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

浅紫色的梦幻 2024-10-17 08:05:38

如果您的“主”表不在另一个表内,您可以执行以下操作:

$('table a:not(table table a)')

或等效:

$('table a').not('table table a')

更新:性能方面,帕特里克的答案要好得多。

If your "main" table is not inside another table, you could do:

$('table a:not(table table a)')

or equivalently:

$('table a').not('table table a')

Update: Performance-wise, Patrick's answer is much better.

浅沫记忆 2024-10-17 08:05:38

我想我宁愿这样做:

$('table').slice( 0, -1 ).find( 'a' );

查找所有表,然后将集合减少到除最后一个之外的所有表,最后为 执行 .find()代码>元素。

原因是我严重偏向于有效的 CSS 选择器,以便 jQuery 可以成功利用 querySelectorAll

I think I'd rather do this:

$('table').slice( 0, -1 ).find( 'a' );

Find all the tables, then reduce the set to all but the last, and finally do a .find() for the <a> elements.

The reason is that I'm heavily biased toward valid CSS selectors so that querySelectorAll can be successfully utilized by jQuery.

喜你已久 2024-10-17 08:05:38

您可以使用桌子的容器。
如果是本体:

$("正文>表格>tr>td>a")

You can do with your table's container.
If it's body:

$("body > table > tr > td > a")

难如初 2024-10-17 08:05:38

尝试使用 子选择器 并为主表提供一个 ID(如果它没有 ID)已经) :

$('#maintable > tbody > tr > td > a')

其中 #maintable 是主表的 ID。

编辑:您还需要将 标记添加到表格中(出于注释中指出的原因)。

这在较新的浏览器上使用基本的 CSS 选择器,并且不需要任何 jQuery 魔法,除非您使用的是较旧的浏览器。

Try using the child selector and giving the main table an ID (if it doesn't have one already) :

$('#maintable > tbody > tr > td > a')

Where #maintable is the ID of your main table.

Edit: You'll also want to add the <tbody> tag to the table (for the reasons indicated in the comments).

This uses basic CSS selectors on newer browsers and doesn't require any jQuery magic unless you're using an older browser.

<逆流佳人身旁 2024-10-17 08:05:38

如果您可以更改动态生成的 HTML,那么您确实应该为每个表提供一个 ID 属性:

<table id="table1"> ...
    <table id="table2"> ...
    </table>
</table>

那么您的选择器就可以很简单

$('#table1').find('a')

。这并不能真正回答您的问题,但这种设计更易于维护且更易于更改。

If you can change the dynamically-generated HTML you should really give each table an ID property:

<table id="table1"> ...
    <table id="table2"> ...
    </table>
</table>

Then your selectors can be simply

$('#table1').find('a')

This doesn't really answer your question, but this design is much more maintainable and easier to change.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文