5

I've got following structure of h1 element

<h1>
<a href="#">My Text</a> <span>More Text</span> another text <a href="#">and a bit more</a>
</h1>

How can I get contents from such h1 and convert them to text so the output would be "My Text More Text another text and a bit more"

and after that place it into the <title> of the page? So no links, spans etc.. Just text?

Ilja
  • 44,142
  • 92
  • 275
  • 498

3 Answers3

8

Without jQuery, you can access the <h1>'s textContent property (innerText in old IE), and you can change document.title (like modifying the <title></title>). Here's an example:

var text = "textContent" in document.body ? "textContent" : "innerText";
document.title = document.getElementsByTagName("h1")[0][text];

Depending on how you want to target the <h1>, you can change the document.getElementsByTagName("h1")[0].

Also, I'm not sure how it affects the title, but the whitespace before the first <a> and after the last </a> will be included unless you trim the string. So maybe turn it into:

function trim(s) {
    if (typeof s === "string") {
        s = s.replace(/^\s+|\s+$/g, "");
    }
    return s;
}

var el = document.getElementsByTagName("h1")[0],
    text = "textContent" in el ? "textContent" : "innerText";
document.title = trim(el[text]);

DEMO: http://jsfiddle.net/tzGzC/

Of course, with just jQuery, it's a lot simpler:

var el = $("h1").eq(0),
    text = el.text();
document.title = $.trim(text);

DEMO: http://jsfiddle.net/kMXLW/

References:

Ian
  • 50,146
  • 13
  • 101
  • 111
5

With jQuery it's just:

$('title').text($('h1').text());
j08691
  • 204,283
  • 31
  • 260
  • 272
1
var h1content = document.getElementById("h1").innerHTML;
// stripped string taken from http://css-tricks.com/snippets/javascript/strip-html-tags-in-javascript/
var newTitle = h1content.replace(/(<([^>]+)>)/ig,"");
document.title = newTitle;

Something to note, crawlers do NOT follow Javascript code, meaning that although this will change the title of the page, it will not be Search Engine Optimized.

This Guy
  • 27
  • 1
  • 1
    Simple solution, but generally [not a good idea](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454). – Mifeet Jun 05 '13 at 21:06
  • Doesn't this assume the `

    ` tag has an ID of "h1"?

    – Wayne Smallman May 31 '19 at 19:29