jQuery: jak zmienić tytuł dokumentu podczas .ready ()?

146

Używam niektórych zagnieżdżonych układów w Ruby on Rails, aw jednym z układów muszę odczytać ciąg z elementu div i ustawić go jako tytuł dokumentu. Jaki jest poprawny sposób (jeśli istnieje) ustawienia tytułu dokumentu?

<script type="text/javascript">
$(document).ready(function() {

    // ???

});
</script>
Jason Miesionczek
źródło
Tylko wyjaśnienie dla tych, którzy zastanawiają się, dlaczego nie ustawić tagu tytułu po stronie serwera: czasami strona jest generowana z mieszaną zawartością i działaniami. Oznacza to, że możesz mieć najpierw plik incude, który tworzy nagłówek, a następnie zawartość jest pobierana z bazy danych, np. Nazwa klienta. Co oznacza, że ​​w momencie wysłania tytułu nazwa klienta nie jest znana. Jest to niechlujne kodowanie bez oddzielania logiki biznesowej od prezentacji, najpierw pobierz wszystkie dane, a następnie je wyświetl, ale czasami to właśnie masz. Szef: „Po prostu umieść nazwę użytkownika w tytule„ Ty ”. Muszę zmienić cały kod.”
Leif Neland

Odpowiedzi:

310

Poniższe powinny działać, ale nie byłyby zgodne z SEO. Tytuł najlepiej umieścić w tagu tytułowym.

<script type="text/javascript">

    $(document).ready(function() {
        document.title = 'blah';
    });

</script>
dpan
źródło
14
Czy kod HTML wygenerowany w JavaScript nie byłby niezgodny z SEO? Jestem prawie pewien, że googlebot nie wykonuje javascript ...
Orion Edwards
1
Czytałem, że istnieją sposoby, aby powiedzieć Google Botowi, co ma czytać, gdy twoje strony są tworzone w Ajax ... próbując googlować.
trusktr
2
@trusktr: Myślę, że mówisz o tym artykule Google: Dokonywanie indeksowania aplikacji AJAX . Ale nie ma to NIC wspólnego z tego rodzaju problemem, więc Orion Edwards ma rację. Jest to po prostu metoda pozwalająca Google czytać treści, które normalnie są generowane przez AJAX, poprzez migawki HTML i pewne modyfikacje po stronie serwera.
Sk8erPeter
1
u mnie nie działa w FF 29.0.1, ale to rozwiązanie opisane poniżej działa: stackoverflow.com/a/11171548/1915920
Andreas Dietrich
2
@OrionEdwards Teraz, ponad pięć lat później, rimmkaufman.com/blog/googlebot-crawling-javascript-site-ready/…
kqr
48

Nie używaj $('title').text('hi'), ponieważ IE tego nie obsługuje.

Lepiej jest użyć document.title = 'new title';

vasio
źródło
43

Działa to dobrze we wszystkich przeglądarkach ...

$(document).attr("title", "New Title");

Działa też w IE

Albert
źródło
2
Czy to jest przyjazne dla SEO?
SearchForKnowledge
@SearchForKnowledge sprawdź stackoverflow.com/questions/30588501/ ...
HasanG
36

Lubię to:

$(document).ready(function ()
{
    document.title = "Hello World!";
});

Pamiętaj, aby ustawić tytuł domyślny, jeśli chcesz, aby Twoja witryna była poprawnie indeksowana przez wyszukiwarki.

Mała wskazówka:

$(function ()
{
    // this is a shorthand for the whole document-ready thing
    // In my opinion, it's more readable 
});
cllpse
źródło
3
Powinieneś zamieścić skrótową rzecz jako nowe „Pytanie” samo w sobie. Przydatny!
MDCore
Nie jestem pewien, czy cię rozumiem, MDCore.
cllpse
Jeff zasugerował użycie stackoverflow w celu uzyskania wskazówek technicznych, które można umieścić na swoim blogu. Sugerowałem opublikowanie porady jako nowego pytania, na które sam sobie odpowiesz.
MDCore
16
<script type="text/javascript">
$(document).ready(function() {

    $(this).attr("title", "sometitle");

});
</script>
Atanas Korchev
źródło
2
tak, właściwie nie możesz używać z $('title').text(...)powodu błędu w IE
TMS
1
Dlaczego nie document.title?
adardesign
6

document.title nie działa dla mnie.

Oto inny sposób na zrobienie tego za pomocą JQuery

$('html head').find('title').text("My New Page Title");
John F.
źródło
dla mnie też (FF 29.0.1) i jeśli nie ma w ogóle <title>ustawionego, to nawet $('html head').add('<title>override default title</title>')nie działa
Andreas Dietrich
2
Czy to jest przyjazne dla SEO?
SearchForKnowledge
5

Używam niektórych zagnieżdżonych układów w Ruby on Rails, aw jednym z układów muszę odczytać ciąg z elementu div i ustawić go jako tytuł dokumentu.

Prawidłowy sposób na zrobienie tego znajduje się po stronie serwera.

W twoim układzie w pewnym momencie będzie kod, który umieści tekst w div . Utwórz w tym kodzie również ustawienie zmiennej instancji, takiej jak @page_title, a następnie w zewnętrznym układzie zrób to<%= @page_title || 'Default Title' %>

Orion Edwards
źródło
-2

Jeśli masz skrypt po stronie serwera get_title.php, który powtarza bieżącą sesję tytułu, działa to dobrze w jQuery:

$.get('get_title.php',function(*respons*){
    title=*respons* + 'whatever you want'   
    $(document).attr('title',title)
})
Andreas
źródło
2
wykonanie żądania AJAX w celu ustawienia tytułu jest moim zdaniem bardzo marnotrawne.
Jason Miesionczek
2
OP specjalnie zażądał rozwiązania jQuery w celu rozwiązania problemu po stronie klienta.
Joel Etherton
1
Ustawienie tytułu przez Ajax jest przydatne, ponieważ może pomóc zidentyfikować bieżącą kartę przeglądarki dla użytkownika, gdy znajduje się on na innej stronie.
chim