css, html, php, javascript, jQuery, ajax … – решения, примеры, рецепты
5 Май
Если в предыдущей статье мы говорили о базовых и иерархических селекторах, и узнали что такое базовые фильтры, то в продолжение знакомства с селекторами jQuery разговор пойдет о фильтрах контента и фильтрах атрибутов, visibility-фильтрах и child-фильтрах. Может звучит не очень понятно, но статья содержит большое количество примеров, с помощью которых разобраться будет гораздо легче.
возвращает: Array<element>
Выбираются элементы, которые содержат переданный текст.
Ищем все элементы DIV, содержащие подстроку «John» и подчеркиваем их.
$("div:contains('John')")
.css("text-decoration", "underline");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array<Element(s)>
Выбираются все элементы, которые не содержат потомков (в том числе и текстовых узлов).
Ищем все пустые элементы – они не должны содержать элементов-потомков или текст, вставляем в них текст «Пустой!» и устанавливаем фоновый цвет.
$("td:empty").text("Пустой!")
.css('background', 'rgb(255,220,200)');
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array<Element(s)>
Выбираются элементы, которые содержат по крайней мере один элемент, указанный в селекторе.
В примере добавляем класс «test» ко всем элементам div, которые содержат внутри себя как минимум один элемент p.
$("div:has(p)").addClass("test");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array<Element(s)>
Выбираются все элементы, которые являются родительскими – т.е. имеют элементы-потомки, в том числе и текст.
Ищем все элементы td, имеющие потомков, включая текст. Если кликнуть на таком элементе мышкой, цвет его фона изменит прозрачность.
$("td:parent").click(function () {
$(this).fadeTo(1500, 0.3);
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array<Element(s)>
Выбираются все скрытые элементы или элементы input, имеющие тип «hidden».
Выбираем все скрытые элементы div (их можно будет увидеть, кликнув мышкой по кнопке) и подсчитываем элементы input с типом «hidden».
// в некоторых браузерах в набор будут включены
// элементы head, title, script и т.д.,
// но как правило набор ограничивается элементом body.
$("span:first").text("Всего найдено " +
$(":hidden", document.body).length +
" скрытых элементов.");
$("#showHidden").click(function () {
$("div:hidden").show(3000);
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array<Element(s)>
Выбираются все видимые элементы.
В примере: все видимые элементы div можно сделать желтыми, кликнув по ним мышкой. Невидимые элементы можно показать щелкнув по кнопке, но свой цвет изменять они не смогут.
$("div:visible").click(function () {
$(this).css("background", "yellow");
});
$("button").click(function () {
$("div:hidden").show("fast");
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array<Element(s)>
Выбираются все элементы, имеющие указанный атрибут.
Клик мышкой по элементам div, которые имеют атрибут id, добавит значение этого атрибута в виде текста в соответствующий элемент div.
$("div[id]").one("click", function(){
var idString = $(this).text() +
" = " + $(this).attr("id");
$(this).text(idString);
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array<Element(s)>
Выбираются элементы с атрибутом, значение которого соответствует указанному.
В примере мы ищем элемент input, атрибут name которого имеет значение newsletter и изменяем текст в следующем непосредственно за ним элементе span.
$("input[name='newsletter']").click(function(){
$(this).next().text(" атрибут name = newsletter");
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array<Element(s)>
Выбираются элементы с атрибутом, значение которого не соответствует указанному.
Например ищем все элементы input атрибут name которых не соответствует значению newsletter и изменяем текст в следующем непосредственно за ним элементе span.
$("input[name!='newsletter']").next()
.text(" is not newsletter");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array<Element(s)>
Выбираются все элементы, соответствующий атрибут которых начинается с указанного значения.
В примере мы ищем все элементы input, значение атрибута name которых начинается с news и затем вставляем в них значение «Это news!».
$("input[name^='news']").val("Это news!");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array<Element(s)>
Выбираются все элементы, соответствующий атрибут которых заканчивается указанным значением.
В примере мы ищем все элементы input, значение атрибута name которых заканчивается на letter и затем вставляем в них значение «Это letter!».
$("input[name$='letter']").val("Это letter!");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array<Element(s)>
Выбираются все элементы, соответствующий атрибут которых содержит в качестве подстроки указанное значение.
В примере мы ищем все элементы input, значение атрибута name которых содержит подстроку man и затем вставляем в них значение «Найдена подстрока man!».
$("input[name*='man']").val("Найдена подстрока man!");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array<Element(s)>
Выбираются все элементы, которые имеют указанные атрибуты и соответствующие значения.
Ищем все элементы input, которые имеют атрибут id, а также атрибут name, значение которого заканчивается подстрой «man». Вставляем в найденные элементы значение «найдено».
$("input[id][name$='man']").val("найдено");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array<Element(s)>
В качестве аргумента принимает число или строку. Число может представлять индекс элемента (обратите внимание, что здесь отсчет ведется с 1), строка – even, odd, или equation. Выбираются все элементы, которые являются n-нными потомками своего родителя или четными/нечетными потомками.
В примере мы ищем каждый второй элемент li во всех отобранных элементах ul, ну и отмечаем их.
$("ul li:nth-child(2)").append("<span> - 2-ой!</span>");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array<Element(s)>
Выбираются все элементы, которые являются первыми потомками своих родителей.
В примере мы выбираем первый элемент span в каждом найденном элементе div и подчеркиваем их текст. Да, и еще при наведении курсора мыши добавляем класс, который сделает текст жирным и зеленого цвета.
$("div span:first-child")
.css("text-decoration", "underline")
.hover(function () {
$(this).addClass("sogreen");
}, function () {
$(this).removeClass("sogreen");
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array<Element(s)>
Выбираются все элементы, которые являются последними потомками своих родителей.
В примере мы выбираем последний элемент span в каждом найденном элементе div и делаем их текст красного цвета. Уменьшаем размер шрифта до 80%. При наведении курсора мыши добавляем класс, который зачеркнет текст.
$("div span:last-child")
.css({color:"red", fontSize:"80%"})
.hover(function () {
$(this).addClass("solast");
}, function () {
$(this).removeClass("solast");
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Array<Element(s)>
Выбираются все элементы, которые являются единственными потомками своего родителя. Если родитель имеет других потомков – ничего не будет выбрано.
В этом примере в каждом отобранном элементе div ищем кнопку не имеющую сестринских элементов. Ну и немного ее модифицируем, устанавливая для нее текст «Alone» и синюю рамку шириной 2 пиксела.
$("div button:only-child")
.text("Alone").css("border", "2px blue solid");
Откройте пример в отдельном окне и посмотрите исходный код.
В следующей статье мы продолжим знакомиться с селекторами jQuery…
Отзывов (27) на «jQuery API: Selectors – селекторы jQuery: фильтры контента, visibility-фильтры, фильтры атрибутов, child-фильтры.»
Отличная работа, если будете продолжать в таком же духе, то можно спокойно потом будет выпускать книгу «JQuery CookBook»
Ну на CookBook это вряд ли тянет. Это всего лишь перевод документации к jQuery, который можно спокойно и со всеми примерами найти на http://jquery.com
Однозначно не копипаст… А хороших переводов, темболее API функционала нет вообще (те фрагменты это так – обозрение). И блог Геннадия – это наиболее ёмкий русскоязычный ресурс по jQuery. Если не ошибаюсь этот блог стоит в истоках русскоязычной документации на оф. сайте jquery.com
а каков синтаксис при выборе детей элемента, с которым работаешь (this)?
к примеру, this-ом является элемент со вложенным списком ul — как с использоанием (this) проводить операции с этим вложенным в него ul-ом?
что-то наподобие:
$(this > «ul»).slideDown(«slow»); ?
2 Николай Громов (nicothin)
$(‘ul’, this). bla bla bla
а как можно обратиться к ячейкам таблицы, к которой я обращаюсь через this и чтобы это никак не затронуло ячеек вложенных таблиц
Довольно просто:
$('td',this).not($('td table td'));большое вам спасибо
еще подскажите пожалуйста-
надо выбрать параграфы с определенным классом (например cl1), содержащие ссылку с определенным значением определенного атрибута (например name).
я пишу так
$(«p.cl1″).children(«a[@name='"+value+"']«)
или так
$(«p.cl1[a[@name='"+value+"']]»)
почему это не работает?
Усложняете в первом варианте и неверно пишете в варианте втором. Можно написать примерно так:
$("p.cl1 a[name='+value+']");и еще обратите внимание на отсутствие @ в примере.
Если используете версию 1.3+ то с @ не будет работать, а вот если версия ниже, чем 1.3 тогда @ нужна.
А подскажите – почему не работает вот это:
var r_name = ‘Ras’ + day;
$(«input[name='+r_name+']«).css(«background-color», «red»);
Почему не работает? Работает. Просто Вы кавычки неверно поставили. Надо:
$("input[name=" + r_name + "]") .css("background-color", "red");Еще проблема может быть разве в версии библиотеки, которую Вы используете. В версиях ниже, чем 1.3, насколько помню, надо было делать так:
$("input[@name=" + r_name + "]") .css("background-color", "red");Огромное спасибо за мгновенный ответ.
Только тогда кавычки получается неверно указаны в отзыве № 10 ? там одинарные внутри.
Вероятно да. Понимаете, я же пишу ответы в основном сразу, с листа так сказать. Поэтому бывают и издержки
Спасибор за статью. Подскажите пожалуйста каке получить первого заданного родителя элемента?
Например первый вышестоящий li или 2 или 3? Можно ли это как-нибудь упростить*?
$(Элемент).parent()
2 Gennady
Здравствуйте.
А вы уже сталкивались с проблемой, что скрипты работавшие с версией 1,2 падают с 1,3.
Нет ли списка конфликтов?
У меня, например, отказался работать плагин sortable, а конкретнее метод stop, когда его задаешь при объявлении. Т.е. передавть в конструктор stop: bla bla bla
Решение (если кому надо): биндеть действие после объявления. Т.е.
$(Список).sortable();
$(Список).bind(’sortstop’, function(){ тело });
Списком конфликтов не озадачивался. Один знаю точно – в фильтрах атрибутов значок @ в версиях 1.3 надо убирать.
Здравствуйте! Недавно начал изучать библиотеку Jquery, возник такой вопрос: “Как получить значение поля input, типа hiden”
Ну, например так:
$("input[type='hidden']").val();Вас вероятно немного спутал фильтр :hidden – это немного не то. Это фильтр скрытых элементов, ну для примера тех, у которых в css-свойстве display указано значение none.
Спасибо! Попробуем!
Привет всем!
Появилась необходимость выяснить при помощи jquery:
Имеет ли элемент потомков или нет.
В Ajax для этого используется hasChildNodes()
А что используется в jquery?
В Ajax для этого используется hasChildNodes()
В Ajax???? Может быть Вы имели ввиду в чистом JavaScript?
В jQuery можно использовать метод contents(), который ищет все дочерние узлы (включая текстовые) внутри выбранного элемента или содержимое документа, если выбранный элемент является ifram’ом.
nly-child – если нужно найти элементы, которые имеют единственного потомка, или :empty для выбора элементов вообще потомков не имеющих. А фильтр :parent наоборот поможет выбрать элементы, которые являются родителями…
В общем, в зависимости от конкретной задачи можно например применить фильтр
В общем способов на самом деле масса.
А какой синтаксис будет в данном случае?
if (у_элемента_есть_потомки){
alert(«Потомки есть»);
}else{
alert(«Потомков нет»);
}
Дело в том, что у меня есть скрипт, который дописывает данные в таблицу (находит и добавляет данные через $(‘.result table’).find(‘tbody’).append(«»+значение+»").
Есть два onclick-события, каждое передает определенное значения, которое надо дописать при этом удалив старое ($(‘.result table’).find(‘tbody’).children().remove();).
В принципе, все работает, но не удовлетворяет принцип: Есть потомки – удаляет, нет потомков – удаляет (потомков, которых еще нет O_o)
Очень сильно намудрил, вот и хотел узнать может есть вариант попроще.
Заранее благодарю.
Наверное логичнее воспользоваться парой фильтров :empty – :parent
Условный пример:
$('button:first').click(function(){ $('table tbody:empty').append('<tr><td>1</td></tr>'); }); $('button:last').click(function(){ $('table tbody:parent').empty(); });Клик по первой кнопке добавит в tbody строку и ничего не станет делать, если tbody уже что-то содержит. Клик по второй кнопке очистит все содержимое tbody.
Важно, чтобы в изначальной html-разметке между открывающим и закрывающим тэгами tbody не было ничего, даже пробелов, иначе это будет воспринято как текстовый узел…
Вот как-то так примерно.
О! Ларчик еще проще открывается.
Спасибо!
Обсуждение статьи можно продолжить на форуме jQuery.