css, html, php, javascript, jQuery, ajax … – решения, примеры, рецепты
19 Май
Это продолжение цикла статей по документации jQuery и в сегодняшней статье попробуем разобраться, как библиотека jQuery работает с атрибутами элементов. Как всегда, все будет пояснено на простых примерах…
возвращает: Object
Обеспечивает доступ к значению указанного атрибута первого элемента в наборе. Если элемент не имеет атрибута с таким именем, будет возвращено undefined.
В этом примере мы ищем значение атрибута title первого элемента <em> на странице.
var title = $("em").attr("title");
$("div").text(title);
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Устанавливает атрибуты всех элементов набора, используя объект, содержащий пары ключ/значение. Это пожалуй наилучший путь для того, чтобы установить большое количество атрибутов во всех отобранных элементах. Помните, что Вы можете также использовать ‘className’ как ключ, если хотите установить значение атрибута class. Также можно использовать .addClass(class) или .removeClass(class), но об этом речь пойдет немного позже.
В этом примере мы устанавливаем значения некоторых атрибутов для всех элементов <img> на странице.
$("img").attr({
src: "/images/hat.gif",
title: "jQuery",
alt: "jQuery Logo"
});
$("div").text($("img").attr("alt"));
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Устанавливает значение указанного атрибута для всех отобранных элементов.
В этом примере мы устанавливаем значение disabled для атрибута disabled для второго, третьего и т.д. элементов button на странице. Если конечно они есть…
$("button:gt(1)").attr("disabled","disabled");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Устанавливает для указанного атрибута всех отобранных элементов соответствующее значение, вычисляя его. Здесь в качестве второго аргумента выступает уже не строка, а функция, которая и обеспечивает необходимые вычисления.
В этом примере мы устанавливаем значение атрибута id для элементов div таким образом, что они соответствуют порядковому номера элемента div на странице.
$("div").attr("id", function (arr) {
return "div-id" + arr;
}).each(function () {
$("span", this).html("(ID = '<strong>" + this.id + "</strong>')");
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Удаляет указанный атрибут из всех элементов присутствующих в наборе.
В этом примере у элемента input изначально присутствует атрибут disabled со значением disabled. По щелчку мышкой на кнопке мы выбираем следующий за кнопкой элемент (это как раз input в нашем случае) и удаляем атрибут disabled. Затем передаем фокус элементу input и вставляем в него значение «Можно редактировать!».
$("button").click(function () {
$(this).next().removeAttr("disabled")
.focus()
.val("Можно редактировать!");
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Указанный(е) класс(ы) добавляются в каждый из отобранных элементов.
В примере мы добавляем класс с именем ’selected’ к последнему параграфу.
$("p:last").addClass("selected");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Boolean
Возвращает true, если указанный класс присутствует как минимум в одном из элементов набора.
В примере мы ищем класс с именем ’selected’ в разных наборах элементов.
$("div#result1").append($("p:first")
.hasClass("selected").toString());
$("div#result2").append($("p:last")
.hasClass("selected").toString());
$("div#result3").append($("p")
.hasClass("selected").toString());
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Удаляет все, или указанный(е) класс(ы) для всех элементов набора.
В примере мы удаляем класс с именем ‘blue’ из всех четных параграфов на странице (т.е. 0-й, 2-й, 4-й и т.д.).
$("p:even").removeClass("blue");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Добавляет указанный класс к элементам набора, если такой класс не существует и удаляет этот класс, если он присутствует.
В нашем примере мы переключаем (добавляем/удаляем) класс с именем ‘highlight’ для параграфа на котором был сделал клик.
$("p").click(function () {
$(this).toggleClass("highlight");
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: String
Получает в виде строки html-код (innerHTML) для первого элемента в наборе. Эта возможность недоступна для XML-документов (хотя это работает для XHTML-документов).
В этом примере клик мышкой на параграфе конвертирует его HTML-код в текст.
$("p").click(function () {
var htmlStr = $(this).html();
$(this).text(htmlStr);
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Устанавливает html-код для всех элементов в наборе. Эта возможность недоступна для XML-документов (хотя это работает для XHTML-документов).
В этом примере мы добавляем некоторый html-код в каждый элемент div.
$("div").html("<span class='red'>Здрасссьте <strong>еще раз!</strong></span>");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: String
Получает в виде строки текстовое содержимое всех элементов набора. Этот метод работает как с HTML, так и с XML-документами.
В этом примере мы ищем текст первого параграфа (html внутри параграфа игнорируется), а затем вставляем его как html в последний параграф, чтобы продемонстрировать, что у нас получился чистый текст. Обратите внимание, что пропало оформление жирным шрифтом красного цвета.
var str = $("p:first").text();
$("p:last").html(str);
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Устанавливает текстовое содержимое для всех элементов набора. Очень похоже на html(), но экранирует HTML, заменяя например «< » и «>» их HTML сущностями.
В этом примере мы добавляем текст в параграф (обратите внимание, что тэги b экранируются).
$("p").text("<b>Some</b> new text.");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: String, Array
Получает содержимое атрибута value первого элемента в наборе. Начиная с версии jQuery 1.2 содержимое атрибута value возвращается для всех элементов (в ранних версиях это не работало для элементов select, multiple select и checkbox), включая элементы select и multiple select, для которого возвращается массив значений. В старых версиях библиотеки jQuery можно использовать функцию fieldValue от плагина jQueryForm. Для элементов select и checkbox – использовать :selected и :checked селекторы.
В этом примере мы получаем выбранное значение элемента select и массив, содержащий выбранные значения элемента multiple select, ну и показываем эти выбранные значения.
function displayVals() {
var singleValues = $("#single").val();
var multipleValues = $("#multiple").val() || [];
$("p").html("<strong>Single:</strong> " +
singleValues +
" <strong>Multiple:</strong> " +
multipleValues.join(", "));
}
$("select").change(displayVals);
displayVals();
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Устанавливает значение атрибута value для всех элементов набора. Начиная с версии jQuery 1.2 можно также устанавливать содержимое атрибута value для элементов select (в ранних версиях это не работало для элементов select, multiple select).
В примере мы устанавливаем значение атрибута value элемента input, используя в качестве значения текст кнопки по которой был совершен клик мышкой.
$("button").click(function () {
var text = $(this).text();
$("input").val(text);
});
Откройте пример в отдельном окне и посмотрите исходный код.
Вот и все. Но впереди нас ждет еще много интересного. Например Traversing – наверное уместнее всего будет перевести это как обход объектной модели документа. Или Manipulation – манипуляции элементами в объектной модели документа. И еще многое другое.
Отзывов (26) на «jQuery API: Attributes – атрибуты.»
В примере с html(val):
$(«div»).html(«Здрасссьте еще раз!«);
присутствует ошибка с парностью кавычек: вместо class=»red» должно быть class=’red’
В самом примере нормально, а в примере кода – да действительно. Исправил. Спасибо.
Огромное спасибо автору, это именно то что я искал.
Может ктото пожет как возможно отследить клик в этом примере
$(«p»).click(function () {
$(this).toggleClass(«highlight»);
});
т.е. я хочу записать в cookeis в каком состоянии остался пример после нажатий.
Поскольку toggleClass() добавляет и удаляет нужный класс для соответствующего элемента, логично отследить наличие этого класса с помощью is(expr). Ну, примерно так:
$(”p”).click(function () {
$(this).toggleClass(”highlight”);
if ($(this).is(«.highlight»)) {
// ставим куку -> есть highlight
} else {
// ставим куку -> нет highlight
}
});
Ну а при загрузке страницы эту самую куку проверяем и в соответствии с ее состоянием добавляем или не добавляем класс highlight в соответствующий элемент.
Огромное СПАСИБО Gennady !
.
3 дня сидел с этой проблемой , понимал ,что решение какое то простое, но как сделать не знал.
Чуть jQuery 2 не написал
Документация вся на английском ,примеры тоже , пока поймешь что там , не хочется работать .
Здравствуйте,
тут у Вас есть маленькая опечатка:
toggleClass(class)
возвращает: jQuery
Добавляет указанный класс к элементам набора, если такой класс не СУЩЕСТВУЕТ (не установлен) и удаляет этот класс, если он присутствует.
Да нет, все верно… Смысл в том, что toggleClass(class) как бы переключает классы для элемента (имеется ввиду конечно стилевое оформление). И если у элемента НЕ СУЩЕСТВУЕТ класса с таким именем – он будет добавлен, а если такой класс у элемента СУЩЕСТВУЕТ – то он будет удален.
Вы пример с toggleClass(class) пощелкайте повнимательнее. Желтый бэкграунд описан в классе .highlight – вот по каждому клику этот класс то добавляется, то удаляется.
Здраствуйте. В Opera 9.63 (9.62) не работают многие скрипты.
В Firefox и IE разных версиях все ок. В Opera 9,51 (9,52) все тоже замечательно работает.
Проблему нужно искать в Опере или в скриптах?
Кто сталкивался с такой проблемой?
А как собрать все значения атрибута «src» тега img, находящегося внутри ячейки td с классом s3 ?
$(«td.s3 > img»).attr(«src») – будет отрабатывать только на первом элементе, а необходимо выловить все!
Подскажите пожалуйста!
Сам селектор Вы написали верно, но поскольку Вы предполагаете, что картинок у Вас далеко не одна, то и обрабатывать надо перебирая весь полученный набор:
$('td.s3 > img').each(function(){ alert($(this).attr('src')); });поскольку контекстом функции будет являться текущий элемент набора, к нему можно обратиться через this и получить значение атрибута src.
Спасибо, Gennady!
Хорошие примеры, было бы вообще замечательно если бы было ещё больше практических примеров, работы с массивами и передачи данных скрипту на сервере для обработки!
Здравствуйте Gennady!
Подскажите пожалуйста как получить значение элемента name ???
пример:
<img class=»img» src=»#» name=»somename» />
Значение атрибута name элемента img – так правильно.
А получить очень просто – выбрать нужный элемент и воспользоваться методом attr(name).
Например:
nm = $("img").attr("name"); // получили name hf = $("img").attr("href"); // получили hrefvar myimg = $(«img»).attr(«name»);
alert(«my img=» + myimg);
пишет my img=undefined
Дык…. Тогда самого начала… Проверяйте правильно ли подключена библиотека, есть ли в разметке элемент img, есть ли у него нужный атрибут…
Вообще, если в чем-то сомневаетесь, лучше пробовать на простейшей тестовой страничке, где абсолютно ничего нет, кроме того, что Вас интересует…
Задача: при клике на любой ячейке заносить в поля редактирования всю запись.
скрин http://savepic.org/92011.htm
Кнопки навигации осуществляют в порядке очереди переход на первую, предыдущую, следующую и последнюю запись.
«Вставить» – добавление новой записи в конец таблицы и в базы.
«Удалить» – удаление выделенной записи из таблицы и базы.
«Редактировать» – подтверждение изменений в выделенной записи и базе.
Ну, задача-то вполне решаема. Только не очень понятно, почему в статье про атрибуты вопрос задан. И непонятно, что собственно узнать-то хотите?
Здравствуйте, Gennady
Узнать хочу вот, что: надо обработать событие onclick.
Лазил по форумам, пробовал примеры. Некоторые вообще неработоспособны, некоторые не подходят.
Ваши работают, но не подходят под мою задачу.
Узнать хочу, как реализовать вышеописанную задачу.
Не могу выдернуть значения ячеек записи в поля редактирования
Простейший пример:
$('table tr').click(function(){ $(this).children().each(function(){ // $(this).text(); // текст в текущей ячейке }); });Поясняю: при клике на какой-либо строке будут выбраны все ее потомки, т.е. элементы td, которые нам и нужны. Обходим их, при каждой итерации получая например текст очередной ячейки.
Ну, тут же можно и вставлять этот текст куда надо или еще что-то делать. Это уже детали.
Спасибо, Gennady
а с деталями можно?
плюс обратный процесс: из полей редактирования, в таблицу, если это делается не полным ее обновлением.
С обратным процессом принцип практически тот же, только выбирать надо уже все поля ввода. Например:
$('button').click(function(){ $(form input:text).each(function(){ // $(this).val(); // текст в текущем инпуте }); });здесь при клике по какому-то баттону собираем данные из полей ввода.
Вопрос будет в том, куда именно эти данные вставлять, т.е. в какую именно строку. Значит надо еще в первой части предусмотреть какой-то идентификатор строки и при клике по ней передавать его в форму скрытым полем например. Тогда строку можно будет идентифицировать и вставить данные в нужное место.
По такому же принципу лучше строить работу и с конкретными ячейками строк – дать им например какие-то имена классов, чтобы вставлять их именно по этому принципу, застраховав свой код от изменения порядка следования ячеек в строке…
в качестве идентификатора строки может послужить ключевое поле «Код». оно однозначно идентифицирует запись в базе и таблице.
я одним из вариантов рассматривал чтение данных из базы по коду, а не из таблицы. хотя конечно это лишнее обращение к серверу.
если можно, то поподробнее о присвоении полю значения из ячейки и наоборот.
кстати, вопрос: данные в таблице не только текстовые, не возникнут ли проблемы при обновлении базы?
…поподробнее о присвоении полю значения из ячейки и наоборот…
Я давал очень простые примеры, чтобы пояснить сам принцип, но Вам бы стоило глубже разобраться с библиотекой прежде, чем браться за решение задач такого уровня – ведь следующим вопросом у Вас будет: «как отправить данные на сервер, используя ajax-запрос»…
Однако ладно:
val = $(this).text(); // это из первого примера $('#myInput').val(val);Я специально даю подробный код для того, чтобы было понятнее. Первая строка ясна, вторая – нашли элемент с идентификатором myInput и вставили в него значение переменной val.
Тот же принцип и в обратную сторону – найти нужную строку, нужную ячейку и вставить туда данные.
З.Ы. Сергей, не обижайтесь, я всегда с готовностью поясняю принципы работы, но писать код Вы должны самостоятельно…
Спасибо, Gennady
попробую
ну сброс данных в базу думаю получится
как-то же я их оттуда считал.
я просто делаю веб-аналог действующего приложения на С++ Билдер.
времени не хватает самому досконально изучить java-script, ajax – экзамен через 2-3 недели.
Большое спасибо Вам за помощь!!!
Обсуждение статьи можно продолжить на форуме jQuery.