jQuery: как изменить заголовок документа во время .ready ()?

146

Я использую несколько вложенных макетов в Ruby on Rails, и в одном из макетов мне нужно прочитать строку из div и указать ее в качестве заголовка документа. Как правильно (если есть) установить заголовок документа?

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

    // ???

});
</script>
Джейсон Месьончек
источник
Просто объяснение для тех, кто интересуется, почему бы просто не установить тег заголовка на стороне сервера: иногда страница генерируется со смешанным содержанием и действием. Т.е. сначала у вас может быть файл incude, который создает заголовок, а затем содержимое извлекается из базы данных, например, имя клиента. Что означает, что во время отправки заголовка имя клиента неизвестно. Это неаккуратное кодирование, которое не разделяет бизнес-логику и представление, сначала получает все данные, а затем выводит их на экран, но иногда это то, что у вас есть. Босс: «Просто введите имя клиента в заголовке« Вы », я должен рефакторинг всего кода».
Лейф Неланд

Ответы:

310

Следующее должно работать, но оно не будет совместимо с SEO. Лучше всего поместить заголовок в тег заголовка.

<script type="text/javascript">

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

</script>
DPAn
источник
14
Не будет ли какой-нибудь сгенерированный javascript HTML несовместимым с SEO? Я почти уверен, что googlebot не выполняет javascript ...
Orion Edwards,
1
Я читал, что есть способы сообщить Google Bot, что читать, когда ваши страницы создаются с помощью Ajax ... пытаясь найти их.
trusktr
2
@trusktr: я думаю, что вы говорите об этой статье Google: Создание приложений AJAX для сканирования . Но это НИЧЕГО не имеет отношения к такой проблеме, поэтому Орион Эдвардс прав. Это просто метод, позволяющий Google читать содержимое, которое обычно генерируется с помощью AJAX, через снимки HTML и некоторые модификации на стороне сервера.
Sk8erPeter
1
у меня не работает в FF 29.0.1, но работает описанное ниже решение: stackoverflow.com/a/11171548/1915920
Андреас Дитрих
2
@OrionEdwards Теперь, более пяти лет спустя, rimmkaufman.com/blog/googlebot-crawling-javascript-site-ready/…
kqr
48

Не используйте $('title').text('hi'), потому что IE не поддерживает его.

Лучше использовать document.title = 'new title';

vasio
источник
43

Это прекрасно работает во всех браузерах ...

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

Работает в IE тоже

Альберт
источник
2
Это SEO дружественный?
SearchForKnowledge
@SearchForKnowledge проверка stackoverflow.com/questions/30588501/…
HasanG
36

Как это:

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

Обязательно установите заголовок по умолчанию, если вы хотите, чтобы ваш сайт был правильно проиндексирован поисковыми системами.

Небольшой совет:

$(function ()
{
    // this is a shorthand for the whole document-ready thing
    // In my opinion, it's more readable 
});
cllpse
источник
3
Вы должны опубликовать стенографию как новый «Вопрос» сам по себе. Полезно!
MDCore
Не уверен, что понимаю вас, MDCore.
cllpse
Джефф предположил, что можно использовать stackoverflow для тех технических советов, которые можно разместить в своем блоге. Я предлагал опубликовать совет как новый вопрос, на который вы отвечаете сами.
MDCore
16
<script type="text/javascript">
$(document).ready(function() {

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

});
</script>
Атанас Корчев
источник
2
да, на самом деле, вы не можете использовать $('title').text(...)из-за ошибки в IE
TMS
1
Почему нет document.title?
adardesign
6

document.title не работал для меня.

Вот еще один способ сделать это с помощью JQuery

$('html head').find('title').text("My New Page Title");
Джон Ф
источник
для меня тоже (FF 29.0.1) и если вообще ничего не <title>настроено, даже $('html head').add('<title>override default title</title>')не работает
Андреас Дитрих
2
Это SEO дружественный?
SearchForKnowledge
5

Я использую несколько вложенных макетов в Ruby on Rails, и в одном из макетов мне нужно прочитать строку из div и указать ее в качестве заголовка документа.

Правильный способ сделать это на стороне сервера.

В вашем макете в какой-то момент будет какой-то код, который помещает текст в div . Сделайте, чтобы этот код также установил некоторую переменную экземпляра, такую ​​как @page_title, и затем во внешнем макете сделайте это<%= @page_title || 'Default Title' %>

Орион Эдвардс
источник
-2

Если у вас есть серверный скрипт get_title.php, который повторяет текущий титульный сеанс, это прекрасно работает в jQuery:

$.get('get_title.php',function(*respons*){
    title=*respons* + 'whatever you want'   
    $(document).attr('title',title)
})
андреас
источник
2
выполнение ajax-запроса для установки заголовка, на мой взгляд, очень расточительно.
Джейсон Месьончек
2
OP специально запросил решение jQuery для проблемы на стороне клиента.
Джоэл Этертон
1
Установка заголовка через ajax полезна, так как может помочь идентифицировать текущую вкладку браузера для пользователя, когда он находится на другой странице.
Чим