【问题标题】:How to get the last anchor element of a website如何获取网站的最后一个锚元素
【发布时间】:2015-11-06 05:46:10
【问题描述】:

无论 DOM 树结构如何,我都需要获取网站的最后一个锚点。

我试过了:

$(document).ready(function(){
    var lastAnchor = $(this).find("a:last-child");
    alert(lastAnchor);
});

但是,我得到了存在于任何元素中的所有最后一个锚点,其中至少包含一个锚点。我知道这可以转换为一个数组,并从那里提取最后一个元素......但这不是正确的方法。那么什么是正确的方法?

趣事: 在弄乱了选择器一段时间后,我想出了:

$(this).find("a:last-child").find(":last-child")

这导致了明显的改进:

$(this).find("a:last-child :last-child")

但我发现这种解决方案既效率低下麻烦。我拒绝相信不存在更好的选择器。

我想我错过了一些明显的东西,但它还没有击中我。

谁能告诉我是否有更好的方法来做到这一点,还是我无缘无故地哭狼?

编辑:奖金回合

到目前为止,这个问题已经发布了非常好的答案,沿着 CSS/JavaScript/JQuery 的路线。但是,您能否补充一下您的答案是否与跨浏览器兼容?

【问题讨论】:

  • “但这不是正确的方法” - 为什么不呢?
  • 因为我认为应该存在更好的选择器,你不觉得吗?

标签: javascript jquery html css


【解决方案1】:

你为什么不试试$('a:last');

【讨论】:

  • 哪个最好,lastlast-of-type
  • 为了让它知道最后是什么,它仍然必须扫描所有的 a。顺便说一句,最后一个()(函数)实现就像this.eq(-1);我在这里看不到任何好处,而不是得到所有a然后取最后一个。
  • @RoyiNamir 在这种情况下,有人可能会争辩说last 是我提出的问题的直接最佳选择
  • @AGE 如果您在谈论速度,(使用 jquery)然后阅读 jquery 所说的内容:“为了在使用 :last 选择元素时获得最佳性能,首先使用选择元素一个纯 CSS 选择器,然后使用 .filter(":last").".
  • @AGE 没有。 last-of-type 没有帮助。在这里,你期待一个红色,但你看到两个:jsbin.com/licayekodo/1/edit?html,js,output
【解决方案2】:

简单的javascript是:

var anchors = document.getElementsByTagName("a");
var lastAnchor = anchors[(anchors.length - 1)];

这是跨浏览器兼容的所有浏览器,一直到那些只理解 DOM 级别 1 的浏览器(即大约 2000 年 - Internet Explorer 5 和 Netscape 6)。

【讨论】:

  • 同意...但是这比 CSS 选择器(例如 lastlast-of-type)有什么好处?顺便说一句很好的答案
  • 只有纯粹的 javascript 总是会稍微快一点。
  • 您的回答很好,但完整的解决方案也将涉及使用 :last 的 CSS。我认为鉴于您和 tabz100 都正确回答了这一事实,不用说您的答案都是最好的。随意在此处添加 CSS 并享受正确答案奖励......但这会在某种程度上剥夺 tabz100 的答案
  • 我完全同意您的看法,我认为可以肯定地说您的解决方案是最有效的解决方案,但它并不能逃避这样一个事实,即拥有:last 本身就是一个非常好的解决方案出色地。无论哪种方式都很好的工作伙伴!
  • 不客气,@AGE。当 jQuery 更高效、更优雅、更节省时间时,使用 jQuery 并没有什么问题,但是当基本的 javascript 解决方案如此简单(并且跨浏览器兼容)时,那么,“Javascript 优先”是一个很好的经验法则.
【解决方案3】:

您正在寻找a:last-of-type。在此处阅读更多信息:https://css-tricks.com/almanac/selectors/l/last-of-type/

【讨论】:

  • 哪个最好,lastlast-of-type
  • @AGE :last-of-type 是正确的 CSS 选择器。 :last 是一个 jQuery 扩展。
  • 知道了,我知道 CSS 选择器 > JS/JQuery。
【解决方案4】:

我相信你想要$("a").last()这样的东西

这将查看页面中的所有锚元素,并为您提供最后检索到的元素。

仅使用 CSS 选择器很棘手,因为它们往往依赖于 DOM 排列,并且您希望选择器与 DOM 无关。例如,a:last-child 选择器将只返回一个锚标记,它是其父元素中的最后一个元素。如果页面上的最后一个锚点不是其父元素中的最后一个元素,则使用该选择器可能对您没有帮助。

【讨论】:

  • 很好,我在 jQuery 文档上错过了这一点,但我认为直接 CSS 选择器是更好的选择......无论如何都是好答案
【解决方案5】:

使用nth-last-child()。当您想要最后一个或第二个到最后时,它非常有用。

$(this).find("a:nth-last-child(1)")

https://api.jquery.com/nth-last-child-selector/

http://jsfiddle.net/o5y9959b/

【讨论】:

  • 我不断询问每个回答的人...哪个最好,lastlast-of-type
  • "我得到了存在于任何元素中的所有最后的锚点,其中至少包含一个锚点。" http://jsfiddle.net/o5y9959b/1/
猜你喜欢
  • 2020-04-06
  • 1970-01-01
  • 2012-04-02
  • 2014-04-27
  • 2010-10-30
  • 1970-01-01
  • 2022-06-28
  • 2022-11-15
  • 1970-01-01
相关资源
最近更新 更多