尝试提取HREF时出现DOM问题

时间:2011-01-19 17:07:57

标签: html dom

我使用DOM来从给定的html源中提取所有HREF-s。但是,有一个问题:如果我有这样的链接:

<LINK rel="alternate" TYPE="application/rss+xml" TITLE="ES: Glavni RSS feed" HREF="/rss.xml">

然后“href”元素将显示为/rss.xml,尽管“/ rss.xml”只是锚文本。点击Chrome浏览器页面源视图中的该链接,即可打开真实链接。

我想把那个href-s LINK,而不是锚文本。拜托,我怎么能用dom来做呢?

3 个答案:

答案 0 :(得分:1)

获取link元素并获取其href属性。假设你使用的是id,

<link id="myLink" rel="alternate" href="/rss.xml" />

var link = document.getElementById("myLink");
link.href; // http://www.example.com/rss.xml

答案 1 :(得分:1)

  

“href”元素将显示为/rss.xml

是的,这是属性的值

  

虽然“/rss.xml”只是锚文本。

没有。 <link>个元素没有锚文本。在以下示例中,“bar”是锚文本。

<a href="/rss.xml">bar</a>
  

点击Chrome浏览器页面源视图中的该链接,即可打开真实链接。

浏览器知道如何解析相对URI。

  

我想把那个href-s LINK,而不是锚文本。拜托,我怎么能用dom来做呢?

您无法使用DOM来解析URI。您使用DOM获取属性的值,然后使用其他内容将其解析为相对URI。

文章Using and interpreting relative URLs解释了它们的工作原理,并且有一些工具可以帮助解决它们。

您需要知道相对URI相对的基URI(通常是包含链接的文档的URI,但基本元素之类的东西可以将其丢弃)

在Perl中你可能会:

#!/usr/bin/perl

use strict;
use warnings;
use URI;

my $str = '/rss.xml';
my $base_uri = 'http://example.com/page/with/link/to/rss.xml';
print URI->new_abs( $str, $base_uri );

给出了:

http://example.com/rss.xml

答案 2 :(得分:0)

您可以尝试使用document.location.href获取当前网址,并附加您从示例中获得的结果。这应该为您提供链接的绝对路径。