Как изменить атрибут заголовка элемента с помощью jQuery

226

У меня есть элемент ввода формы и хочу изменить его атрибут заголовка. Это должно быть легко, как пирог, но по какой-то причине я не могу найти, как это сделать. Как это сделать, и где и как я должен искать, как это сделать?

Брайан
источник

Ответы:

463

Прежде чем писать какой-либо код, давайте обсудим разницу между атрибутами и свойствами. Атрибуты - это настройки, которые вы применяете к элементам HTML-разметки ; Затем браузер анализирует разметку и создает объекты DOM различных типов, которые содержат свойства, инициализированные значениями атрибутов. На объектах DOM, таких как простые HTMLElement, вы почти всегда хотите работать с его свойствами , а не с его коллекцией атрибутов .

В настоящее время рекомендуется избегать работы с атрибутами, если они не являются пользовательскими или нет эквивалентного свойства, дополняющего его. Так titleкак действительно существует как свойство чтения / записи для многих HTMLElements, мы должны воспользоваться этим.

Вы можете прочитать больше о разнице между атрибутами и свойствами здесь или здесь .

Имея это в виду, давайте манипулировать этим title...

Получить или установить titleсвойство элемента без jQuery

Поскольку titleэто открытое свойство, вы можете установить его для любого элемента DOM, который поддерживает его с простым JavaScript:

document.getElementById('yourElementId').title = 'your new title';

Поиск почти идентичен; здесь ничего особенного:

var elementTitle = document.getElementById('yourElementId').title;

Это будет самый быстрый способ изменить заголовок, если вы гайка оптимизации, но так как вы хотели задействовать jQuery:

Получить или установить title свойство элемента с помощью jQuery (v1.6 +)

jQuery представил новый метод в v1.6 для получения и установки свойств. Чтобы установить titleсвойство для элемента, используйте:

$('#yourElementId').prop('title', 'your new title');

Если вы хотите получить заголовок, пропустите второй параметр и запишите возвращаемое значение:

var elementTitle = $('#yourElementId').prop('title');

Ознакомьтесь с prop()документацией по API для jQuery.

Если вы действительно не хотите использовать свойства, или вы используете версию jQuery до v1.6, то вам следует прочитать:

Получить или установить title атрибут элемента с помощью jQuery (версии <1.6)

Вы можете изменить title атрибут с помощью следующего кода:

$('#yourElementId').attr('title', 'your new title');

Или получить его с помощью:

var elementTitle = $('#yourElementId').attr('title');

Ознакомьтесь с attr()документацией по API для jQuery.

Cᴏʀʏ
источник
5
Если это не очень хорошо продуманный ответ, никто не ответит. И это так же точно, как это хорошо построено. +1 ... (о, а также твое имя потрясающее, потому что оно мое :) даже написано то же самое!)
VoidKing
@VoidKing: Я склоняюсь к тому, чтобы вернуться и сделать текущие ответы, которые становятся популярными (из которых у меня есть только несколько). Я стараюсь предоставить все, что я хотел бы найти, если бы я исследовал или опубликовал вопрос. Я рад, что ты нашел это!
Cᴏʀʏ
@Cory Ну, если честно, я искал что-то еще (это был долгий путь, но я искал, есть ли способ стилизовать поле заголовка HTML по умолчанию). Я не нашел то, что искал, но действительно восхищался усилиями, которые вы приложили к этому ответу (вы показали ресурсы, чистый .js и jQuery и т. Д.). В любом случае, хороший ответ!
VoidKing
@VoidKing: Возможно, это неправильное место для ответа, но если вы говорите о всплывающих подсказках по умолчанию, которые появляются, когда вы наводите курсор на элементы с атрибутами alt или title, то, возможно, этот ответ даст вам некоторое представление.
Cᴏʀʏ
@ Кори Спасибо, сэр!
VoidKing
31

В модальных диалоговых окнах jquery ui вам нужно использовать эту конструкцию:

$( "#my_dialog" ).dialog( "option", "title", "my new title" );
Игорь Львович
источник
3
Спасатель !! При использовании ответа с правом голоса, указанного выше, заголовок изменяется один раз, затем заголовок не изменяется, если только вы не используете параметр заголовка в диалоговом окне !! СПАСИБО СООООООО МНОГО!
Райан Эллис
Я рад, что прочитал комментарии ;-) Если вам нужно изменить заголовок несколько раз, вы должны установить его в настройках диалога.
Мишель
Никогда бы не подумал, что это будет принято так много раз. Я очень рад, что это помогло :-)
Игорь Л.
15

Я верю

$("#myElement").attr("title", "new title value")

или

$("#myElement").prop("title", "new title value")

должен сделать трюк ...

Я думаю, что вы можете найти все основные функции в JQuery Docs , хотя я ненавижу форматирование.

WOMP
источник
7

Другой вариант, если вы предпочитаете, это получить элемент DOM из объекта jQuery и использовать для него стандартные методы доступа DOM:

$("#myElement")[0].title = "new title value";

«Способ jQuery», как упоминалось другими, заключается в использовании метода attr (). Смотрите документацию по API для attr () здесь .

Грег Кэмпбелл
источник
2
jqueryTitle({
    title: 'New Title'
});

для первого названия:

jqueryTitle('destroy');

https://github.com/ertaserdi/jQuery-Title

Эрди Эрташ
источник
Эта проблема может быть решена с помощью самой библиотеки jquery. Вы должны ссылаться на использование сторонних библиотек только тогда, когда OP упоминает об этом, или это невозможно сделать без использования сторонних библиотек.
Авишек
Да, но есть и другие функции. Простое, но приятное решение ... Вы можете проверить ...
Эрди Эрташ
могут возникнуть издержки транспорта http сторонней библиотеки, чего можно избежать, используя стандартные / нативные методы.
Авишек
Кроме того, уже есть общепринятый ответ, который является более эффективным.
Авишек
2

Если вы создаете divи пытаетесь добавить titleк нему.

Пытаться

var myDiv= document.createElement("div");
myDiv.setAttribute('title','mytitle');
Р Сингх
источник
0

В дополнение к ответу @ Cᴏʀʏ убедитесь, что заголовок всплывающей подсказки еще не был установлен вручную в элементе HTML. В моем случае класс span для всплывающей подсказки уже имел фиксированный текст, потому что моя функция JQuery $('[data-toggle="tooltip"]').prop('title', 'your new title');не работала.

Когда я удалил атрибут title в классе HTML span, jQuery работал.

Так:

<span class="showTooltip" data-target="#showTooltip" data-id="showTooltip">
      <span id="MyTooltip" class="fas fa-info-circle" data-toggle="tooltip" data-placement="top" title="this is my pre-set title text"></span>
</span>

Должен быть код:

<span class="showTooltip" data-target="#showTooltip" data-id="showTooltip">
      <span id="MyTooltip" class="fas fa-info-circle" data-toggle="tooltip" data-placement="top"></span>
</span>
никола
источник