如何使用jQuery获取标题标签?

13

我有一些以字符串形式表示的HTML。

var html = "
<html>
  <head>
    <title>
      Some Text
    </title>
  </head>
  <body>
    <h1>
      My First Heading
    </h1>
    <p>
      My first paragraph.
    </p>
  </body>
</html>
";

这个标签内含有 title 标签。 我该如何使用 jQuery 或 JavaScript 获取 title 标签内的文本?


3
alert(document.title); - Niet the Dark Absol
3
你的HTML无效,因为title应该在head中而不是body中。 - Rory McCrossan
2
@NiettheDarkAbsol 这将获取正在查看的文档标题,而不是字符串中的 title 元素。 - Rory McCrossan
1
似乎没有人读问题中的最后一行。 - Huangism
1
警告(html.match(/<title>(.*?)</title>/)[1]);冒着小马的风险。 - Niet the Dark Absol
显示剩余2条评论
10个回答

32

只需尝试:

var title = $(html).filter('title').text();

抱歉..是我的错误。我想错了其他的HTML文件。 - putvande
1
“html” 就像 “document” 一样吗? - Ehsan Sajjad
2
例如:$('head title').text() - hsz
1
document.getElementsByTagName('title') - griffon vulture
如果我没有疯,而且页面上只有一个 head 和一个 title,那为什么不使用 jQuery("head title"); 呢? - argentum47
显示剩余2条评论

7

就目前为止还没有人提到,您也可以使用 document.implementation.createHTMLDocument() 来实现此目的。

var domstr = "<html><head><title>Some Text</title></head><body><h1>My First Heading</h1><p>My first paragraph.</p></body></html>";
    doc    = document.implementation.createHTMLDocument('1337');
    doc.documentElement.innerHTML = domstr;

alert( doc.title );

无需 doc = document.implementation.createHTMLDocument('1337'); - Ramesh

5
这是我的翻译。创建一个 documentFragment,向其中添加一个元素,然后使用 querySelector 获取该元素,再使用 textContent 获取文本内容。
var html = "<html><head><title>Some Text</title></head><body><h1>My First Heading</h1><p>My first paragraph.</p></body></html>",
    docFrag = document.createDocumentFragment(),
    el = document.createElement('html');

el.innerHTML = html;
docFrag.appendChild(el);

var text = docFrag.querySelector('title').textContent;

Live Demo


请注意,兼容性有限:IE7不参与。 - Denys Séguret
@dystroy 说得好,但是为了解决这个问题,他们可以使用 getElementsByTagName('title') 来获取元素。 - Loktar
我会尽快在所有生产站点上使用这个。谢谢@Loktar!大家都来使用这个解决方案。 - user1596138
4
@Jhawins 哈哈,无论如何。 - Loktar

4

使用DOMparser如何?

var html  = "<html><head><title>Some Text</title></head><body><h1>My First Heading</h1><p>My first paragraph.</p></body></html>",
    doc   = (new DOMParser()).parseFromString(html, 'text/html');
    title = doc.title;

注意: Safari 的任何版本都不支持此功能。

FIDDLE


很好,+1。我个人从未使用过DomParser - Loktar
3
不错,赞一个,但仅限于IE10以上浏览器。编辑:不支持Safari浏览器 - Denys Séguret

4

在JavaScript中,只需

document.title

对于示例代码

<html>
    <head>
        <title>My Page Title</title>
    </head>
    <body>
        <p id="demo"></p>
        <script>
            document.getElementById("demo").innerHTML = document.title;
        </script>
    </body>
</html>

1
html.match(/<title>(.*)<\/title>/)[1]

2
https://dev59.com/unRB5IYBdhLWcg3wiHz7 - epascarello

1

显然如果你能使用jQuery,这并不是首选方案,但是对于纯Javascript:

/<title>(.*)<\/title>/.exec(html)[1]

https://dev59.com/unRB5IYBdhLWcg3wiHz7 - epascarello
1
是的,我们明白了——每个问题只粘贴一次链接可能就足够了。我甚至声明了jQuery答案更可取,我只是想提供一个纯JavaScript的替代方案。不过还是谢谢你的投票。 - ach
@Ach,你的回答不是“可接受的”,甚至在解析HTML的其他情况下也无法正常工作。这里的问题是如何基于标签从HTML字符串中提取数据。你的答案只适用于这一个特定的情况,但是毫无价值并且会导致问题。你的回答应该被删除。我给你点了个踩。 - user1596138

0
html.substring(html.indexOf('<title>')+7, html.indexOf('</title>'))

0

你可以使用这个 jQuery 选择器来获取那段文本。

$(function(){
var html = "<html><head><title>Some Text</title></head><body><h1>My First Heading</h1><p>My first paragraph.</p></body></html>";
var titleHTML = $(html).find("title").html();
alert(titleHTML);
});

它将会弹出警告框,显示"Some Text"


1
-1 这将返回当前文档的标题。就像 document.title 一样。 - Denys Séguret
1
你没有理解:你的代码没有从给定的HTML字符串中提取标题。 - Denys Séguret
是的,现在它可以工作了,但这和之前给出的答案一样(带有无用的附加内容)。 - Denys Séguret

0

你还可以尝试这个:

$('head > title').text();

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接