css, html, php, javascript, jQuery, ajax … – решения, примеры, рецепты
23 Май
Очередная статья по документации jQuery. Мы разберем как библиотека jQuery позволяет работать с объектной моделью документа. Узнаем как изменять набор элементов DOM с помощью фильтров или поиска, а также научимся формировать и изменять цепочки вызовов для перемещения по объектной модели документа не только вперед, но и назад.
возвращает: jQuery
Уменьшает набор элементов до единственного элемента. Позиция элементов в наборе считаются от 0 и до length – 1.
В примере мы задаем элементу div с индексом 2 синий цвет фона путем добавления класса с именем «blue».
$("div").eq(2).addClass("blue");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Boolean
Контролирует текущий набор элементов на наличие указанного класса и возвращает true, если по крайней мере один из элементов набора имеет указанный класс. Это в общем-то альтернатива синтаксису, когда класс указывается как .class
В этом примере, если клик совершен по элементу div имеющему класс «protected», к нему применяется цепочка вызовов, которая заставляет этот элемент несколько раз сместиться влево-вправо.
$("div").click(function(){
if ( $(this).hasClass("protected") )
$(this).animate({ left: -10 }, 75)
.animate({ left: 10 }, 75)
.animate({ left: -10 }, 75)
.animate({ left: 10 }, 75)
.animate({ left: 0 }, 75);
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Удаляет все элементы из набора, которые не удовлетворяют требованиям выражения(ий). Этот метод используется, чтобы ограничить результаты поиска. Чтобы применить несколько фильтров одновременно, выражения надо отделить запятыми.
В этом примере мы выбираем все элементы div и устанавливаем им одинаковый фоновый цвет. Но только для элементов div, которые имеют класс с именем «middle» мы устанавливаем еще и рамку красного цвета.
$("div").css("background", "#c8ebcc")
.filter(".middle")
.css("border-color", "red");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Удаляет все элементы из набора, которые не удовлетворяют требованиям функции. Функция вызывается в контексте каждого элемента в наборе (подобно $.each). Если функция возвращает false, элемент удаляется из набора, в случае true элемент сохраняется в наборе.
В этом примере мы изменяем цвет всех элементов div и затем добавляем двойную рамку красного цвета только тем из них, кто удовляетворяет требованиям. Т.е. элементу с индексом равным 1 и элементу, который имеет атрибут id=»fourth».
$("div").css("background", "#b4b0da")
.filter(function (index) {
return index == 1 || $(this).attr("id") == "fourth";
}).css("border", "3px double red");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: Boolean
Проверяет текущий набор элементов на соответствие выражению и возвращает true, если хотя бы один из элементов в наборе соответствует выражению. Если нет подходящих элементов или выражение некорректно, возвращается false.
В примере показано несколько возможных вариантов использования is() внутри обработчика события.
$("div").one('click', function () {
if ($(this).is(":first-child")) {
$("p").text("Это первый элемент div.");
} else if ($(this).is(".blue,.red")) {
$("p").text("Это синий или красный элемент div.");
} else if ($(this).is(":contains('Петя')")) {
$("p").text("Это Петя!");
} else {
$("p").html("А это ничего <em>особенного</em>.");
}
$("p").hide().slideDown("slow");
$(this).css({"border-style":"inset",cursor:"default"});
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Переводит набор элементов объекта jQuery в другой набор, представляя его в виде массива. Это можно использовать, чтобы создавать списки значений, атрибутов, значений css. Или даже создавать специальный, пользовательский селектор.
В этом примере мы строим список всех значений формы и добавляем его в элемент p.
$("p").append( $("input").map(function(){
return $(this).val();
}).get().join(", ") );
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Удаляет из набора элементы, соответствующие выражению.
В примере добавляем красную рамку всем элементам div, кроме div зеленого или синего цвета.
$("div").not(".green, #blueone")
.css("border-color", "red");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Отбирает «поднабор» из набора элементов. Работает так же как и встроенный метод slice.
В этом примере часть элементов div окрашивается в желтый цвет случайным образом.
function colorEm() {
var $div = $("div");
var start = Math.floor(Math.random()
* $div.length);
var end = Math.floor(Math.random()
* ($div.length - start)) + start + 1;
if (end == $div.length) end = undefined;
$div.css("background", "");
if (end)
$div.slice(start, end)
.css("background", "yellow");
else
$div.slice(start)
.css("background", "yellow");
$("span").text('$("div")
.slice(' + start + (end ? ', ' + end : '') + ')
.css("background", "yellow");');
}
$("button").click(colorEm);
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Добавляет в уже существующий набор дополнительные элементы, которые удовлетворяют выражению.
В примере мы отыскиваем все элементы div и устанавливаем им рамку красного цвета. Затем добавляем все параграфы в уже существующий объект jQuery и устанавливаем фон желтого цвета. Обратите внимание, что для параграфа красная рамка не была установлена, поскольку эта операция выполнялась ДО добавления этих элементов в набор.
$("div").css("border", "2px solid red")
.add("p")
.css("background", "yellow");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Получает набор элементов, содержащий всех уникальных непосредственных потомков для каждого элемента набора. Этот набор может быть дополнительно отфильтрован с помощью выражения (опционально). Отметьте для себя, что в то время как parents() «видит» все родительские элементы, children() «видит» только непосредственных потомков.
В этом примере мы ищем всех непосредственных потомков элемента на котором был совершен клик.
$("#container").click(function (e) {
$("*").removeClass("hilite");
var $kids = $(e.target).children();
var len = $kids.addClass("hilite").length;
$("#results span:first").text(len);
$("#results span:last").text(e.target.tagName);
e.preventDefault();
return false;
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Отыскивает все дочерние узлы в наборе элементов (включая текстовые) или в содержимом документа, если он представлен как фрейм.
В примере мы отыскиваем все текстовые узлы в параграфе и «обертываем» их в тэг b.
$("p").contents().not("[nodeType=1]").wrap("<b/>");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Осуществляет поиск в наборе элементов, отыскивая те из них, которые удовлетворяют выражению. Это хороший способ отыскивать дополнительные потомки среди тех элементов, которые уже содержатся в наборе. Выражение может быть записано с использованием синтаксиса селекторов CSS 1-3.
В этом примере поиск элементов span производится в наборе всех элементов p. По другому это можно записать как $(«p span»)
$("p").find("span").css('color','red');
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Получает набор элементов, содержащий уникальные сестринские элементы, следующие непосредственно за указанным элементом. Причем для всех элементов в наборе. Обратите внимание – именно следующий непосредственно за нужным элементом.
В этом примере мы отыскиваем сестринские элементы, следующие непосредственно за элементами button, которые имеют значение атрибута disabled = disabled и изменяем текст этих (следующих за кнопками) элементов на «this button is disabled».
$("button[disabled]").next()
.text("this button is disabled");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Отыскивает все сестринские элементы после текущего элемента. Опционально можно использовать выражение, чтобы дополнительно отфильтровать набор элементов.
В этом примере мы определяем все элементы div после первого и назначаем им класс с именем after.
$("div:first").nextAll().addClass("after");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Получает набор элементов, содержащий уникальных «родителей» для элементов набора. Опционально можно использовать выражение для дополнительной фильтрации.
В примере мы показываем «родителя» каждого элемента как (parent > child).
$("*", document.body).each(function () {
var parentTag = $(this).parent().get(0).tagName;
$(this).prepend(document.createTextNode(parentTag + " > "));
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Получает набор элементов, содержащий уникальных «предков» для элементов существующего набора (исключая корневой элемент). Опционально можно использовать выражение для дополнительной фильтрации.
В этом примере мы ищем все элементы-предки для содержимого элемента span, с помощью изученных ранее методов преобразуем эти данные в строку и добавляем к тэгу b.
var parentEls = $("b").parents()
.map(function () {
return this.tagName;
}).get().join(", ");
$("b").append("<strong>" + parentEls + "</strong>");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Получает набор элементов, содержащий уникальные предыдущие сестринские элементы для всех элементов существующего набора. Опционально можно использовать выражение для дополнительной фильтрации. Обратите внимание, что возвращается только непосредственно предыдущий сестринский элемент.
В этом примере мы каждый раз по клику на кнопке находим непосредственно предыдущий сестринский элемент для каждого элемента div.
var $curr = $("#start");
$curr.css("background", "#f99");
$("button").click(function () {
$curr = $curr.prev();
$("div").css("background", "");
$curr.css("background", "#f99");
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Отыскивает все сестринские элементы до текущего элемента. Опционально можно использовать выражение, чтобы дополнительно отфильтровать набор элементов.
В этом примере мы определяем все элементы div перед последним и назначаем им класс с именем before.
$("div:last").prevAll().addClass("before");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Получает набор элементов, содержащий все уникальные сестринские элементы для всех элементов существующего набора. Опционально можно использовать выражение, чтобы дополнительно отфильтровать набор элементов.
В примере мы ищем уникальные сестринские элементы для всех элементов li желтого цвета в трех списках (т.е. включая другие элементы li, если они подходят).
var len = $(".hilite").siblings()
.css("color", "red")
.length;
$("b").text(len);
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Добавляет предыдущий набор к текущему набору. Можно использовать при обходе элементов и затем добавлении чего-либо, что было отобрано в предыдущем обходе.
На примере будет понятнее: мы ищем все элементы div и все все элементы p внутри них, а затем назначаем им два имени класса. Но, обратите внимание, если в первой строке мы добавили к набору элементов p еще и предыдущий div (у всех появилась рамка красного цвета), то во второй строке мы добавили класс, определяющий цвет фона только для элементов p внутри div, но никак не для самого элемента div.
$("div").find("p").andSelf().addClass("border");
$("div").find("p").addClass("background");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Возвращает набор элементов к его предыдущему состоянию, до последней «деструктивной» операции над набором элементов. Если же такой операции не производилось, будет возвращен пустой набор. «Деструктивная» операция – любая операция, изменяющая существующий набор элементов. Это все Traversing функции, которые возвращают объект jQuery (add, andSelf, children, filter, find, map, next, nextAll, not, parent, parents, prev, prevAll, siblings и slice), а также функция clone() из раздела Manipulation.
В этом примере: функция showTags – вспомогательная – получает набор элементов и преобразовывает его в строку названий элементов, а затем эта строка добавляется в элемент b, соответствующий номеру, который был передан в эту функцию. А самое интересное разберем по шагам:
jQuery.fn.showTags = function (n) {
var tags = this.map(function () {
return this.tagName;
})
.get().join(", ");
$("b:eq(" + n + ")").text(tags);
return this;
};
$("p").showTags(0)
.find("span")
.showTags(1)
.css("background", "yellow")
.end()
.showTags(2)
.css("font-style", "italic");
Откройте пример в отдельном окне и посмотрите исходный код.
Ну, наверное на сегодня достаточно. Продолжим в следующий раз, когда будем разбирать манипуляции с объектной моделью документа.
Отзывов (56) на «jQuery API: Traversing – обход DOM.»
Очень нужная статья. Часто рассматривая примеры , бывает довольно сложно применить их для своего проекта, именно из-за незнания как выбрать тот или иной элемент, после этой статьи ,стало намного легче.
Автору еще раз спасибо.
А ты не собираешься превратить свой блог именно в блог по JQuery? А то в сети нет ни одного такого с узкой специализацией.
Спасибо за статью)
Просто сейчас мне очень интересна библиотека jQuery. Но это далеко не единственное, что интересует. Поэтому сейчас подавляющее преимущество на стороне jQuery, а что будет потом – кто знает. Мне например интересен еще и Pyton, и Ruby…
Все Ваши статьи очень познавательны, но меня все же мучает один вопрос, как мне получить массив данных например из такого выражения a=$(«.cla»).text(); если у меня например дивов с таким классом около 10, и я хочу брать текст каждого таким вот образом text=a[0];
$(«div.cla»).each(function () {
var a = $(this).text();
alert(a); // чтобы увидеть текст
});
(обратите внимание – в селекторе я написал div.cla – это сработает быстрее, чем просто .cla, если конечно у Вас все div’ы).
Я в примере просто вывел в alert, но ясно, что тут можно как угодно фантазировать. Загнать в массив например и работать уже с ним…
Благодарю! Создается впечатление, что Вы только и сидите на сайте. Так держать.
Приветствую.
Спасибо за полезные статьи.
По теме данной статьи есть такой вопрос:
На странице имеется ряд списков.
Все эти списки(ul class=»menu») содержат элементы , которые, в свою очередь содержат, элементы . Ко всем применен эффект hide().
Некоторые содержат содержат с классом «active». Надо выбрать эти и применить к ним show().
Я пытнаюсь сделать так:
$(«ul.menu > li > a.active»).show();
Но это не работает т.к. show() применяется к , а не у .
Подскажите решение…
Блин, предыдущий пост отобразился не совсем корректно т.к. некоторые теги ВордПресс принял буквально. Вот мой вопрос ещё раз:
Спискок(ul class=’menu’) содержат элементы «li», которые, в свою очередь содержат, элементы «a». Ко всем «li» применен эффект hide().
Некоторые «li» содержат «a» с классом «active». Надо выбрать эти самые «li» и применить к ним show().
Я пытаюсь сделать это так:
$(«ul.menu > li > a.active»).show();
Но это не работает т.к. show() применяется к «a», а не у «li».
Подскажите решение…
Видимо Вам лучше обратить внимание на статьи, где рассказывается про работу с атрибутами, а конкретнее – посмотрите addClass(class) и removeClass(class). Таким образом Вы сможете добавлять(удалять) выбранному элементу нужный класс, в котором можно одним из правил записать например display:none;
Gennady
Так это я и сделал.
А теперь хочу найти на странице все «li», в которые вложен «а» с присвоенным классом «active» и провести к ними (с «li»,а не с «a») некоторые манипуляции.
Т.е. надо найти элемент(«а class=active») и провести с его родителем «li» манипуляции.
Как это сделать?
З.Ы. пробовал end(), но не помогло – возвращает слишком высоко…
2Anton
jQuery(«a.active»).parent(«li»).css(«color»,»red»);
Кирилл
Belisemo! Спасибо, выручили.
Скажите, а как, например, выбрать все элементы, начинающиеся известной последовательностью символов (скажем, абзацы с длинным тире в начале, или – в общем случае – с некоторым html-кодом)?
В относительно простых случаях подойдет метод contents(), в нем можно указать последовательность символов, которые нужно отыскать. Например:
$(«p»).contents(«sometext»);
вернет все параграфы, внутри которых встретится последовательность символов sometext.
В более сложных случаях без регулярных выражений наверное все-таки не обойтись.
Спасибо. А регулярные выражения используются в том же «.contents» (нет путаницы с «:contains»?), или как-то иначе?
Ха! Конечно. Извините, это у меня прямо пункт – я их все время путаю. Я конечно же имел ввиду :contains(). Даже если нет четкого правила поиска, с помощью него можно вытащить подходящее содержимое, которое затем разбирать с использованием рэгекспов.
Наверное так как-то…
Благодарю.
Разберусь с регулярными, ага.
Но смущает один момент. Мне необходимо в тексте большого объёма найти абзацы, начинающиеся с тире (—), т.е. первые абзацы реплик в интервью, и прописать им доп. класс (для смещения влево, за линию текста). Не считается ли такой подход кривым с точки зрения проф-го разработчика?
Интуитивно — неизящно и медленно.
Привет опять! Подскажи, пожалуйста, как найти и обработать определённый символ внутри текста (@, тире и т.п.), например, заменить на другой?
О, извиняюсь, оказывается я уже спрашивал об этом ) Так и не нашёл решения, кстати.
2Игорь:
Иногда можно воспользоваться и классическим javascript
var str = ‘asd@dsf’;
alert(str.replace(‘@’, ‘-’));
А что, интересные мысли. Зацените-ка и мой блог! гей порно фото клипы
. Много полезностей по теме старые порно фильмы
. Ну и другие темы тож раскрываются ) Короче, велкам =)
столкнулся с nfrjq проблемой:
на некоторой готовой странице поведение ie8 оказалось отличным от ожидаемого.
в теге p был контейнер для всякого разного наполнения.
ловил так: $(…).parents(‘p.имя_класса’)…
оказалось, что ie8 игнорировал тег p, поэтому набор в результате пустой был
перешел на div – работает
это проблема ie8 или тега p ?
jQuery JavaScript Library v1.3.2
Ну с ie8 наверное будут еще бяки выскакивать… Правда, конкретно описанную Вами проблему не видел, не слышал. Надо попробовать, попытать…
только начинаю изучать Jquery и сразу возник вопрос: как можно обратиться к элементу родительского окна (к примеру который имеет идентификатор «test1″) из дочернего?
Ничего особенного по этому поводу в jQuery нет – тут решение традиционное для JS. Открываем новое окно с помощью метода open(), а в новом окне можно получить доступ к родительскому окну через window.opener. Ну если на примерах, то пусть в родительском окне открываем новое так:
$('button').click(function(){ newWindow = open('new.html', '', 'width=300,height=200'); });при следующей HTML-разметке:
<p id="test1">Текст внутри параграфа</p><button>open new window</button>
Тогда в этом новом окне можно написать например так:
alert($(window.opener.document).find('p').text());получив таким образом текст, содержащийся в элементах p родительского окна.
Подчеркиваю – например, потому, что передав функции $ в качестве селектора window.opener.document с ним можно работать так же как и обычно с помощью jQuery.
Большое спасибо за ответ! Вообще сайт очень понравился! Очень много полезной информации для себя нашла на нем!
Привет, у меня проблема хитрая, здесь пишу, потому что решать надо через DOM.
Гружу через $.ajax кусок html, надо на него автоматически повесить события, но скрипт почему-то зацикливается 8(((
вот так инициализирую
$(document).ready(function(){
oxfm();
$(«#loading»).bind(«ajaxStart», function(){
$(«galfield»).fadeOut(«slow»);
$(this).fadeIn(«fast»);
}).bind(«ajaxSuccess», function(){
$(«galfield»).fadeIn(«fast»);
$(this).fadeOut(«slow»);
});
$(«#content_tree»).treeview();
;});
function oxfm(){
$(«#galcontainer»).find(«a»).click(function(){
curUrl = $(this).attr(«href»);
$.ajax({
url : curUrl,
dataType : «html»,
success: function(html){
$(«#galfield»).html(html);
oxfm();
},
error: function(shit1, shit2, msg){
alert(«ошибка загрузки директории » + msg);
return false;
}
});
$(«#pathline»).bind(«ajaxSuccess», function() {
$.ajax({
type : «POST»,
url : curUrl,
data : ({«get» : «newdir»}),
dataType : «text»,
success : function(newpath){
$(«#pathline»).text(newpath);
},
error: function(shit1, shit2, msg){
alert(«ошибка загрузки пути » + msg);
return false;
}
});
});
return false;
});
}
исходный код такой
gallery/items/avangard/
..
glavnoefoto
порезало html… ну там ничего сложного, грубо говоря три основных элемента.
Проблема, судя по всему, появляется из-за рекурсии (в первой $.ajax на success функция вызывает сама себя).
Но я не могу понять, там же просто вешается обработчик события и не должно что-либо делаться до клика… Или я неправильно понимаю систему?
jquery 1.3.1, tynymce, treeview – такой там компот. более старое ядро ставил – не помогает.
ted, с удовольствием что-то подсказал бы, но чуть позже. После 22-го. Сейчас в отпуске, в Крыму. Очень уж тяжело отвлечься от загораний-купаний… В инет выхожу на часок-полтора в день. Только самое необходимое сделать.
Метод имени товарища Тыка, как обычно рулит (только времени жрет зараза).
Короче вся лажа была тут
$(”#pathline”).bind(”ajaxSuccess”, function() { …
видимо как-то с механизмом работы ajax я не додумал,
в итоге убрал бинд совсем и всё ок. Но что за зацикливание было, я бы ради интереса поразбирался…
а почему некоторые переменные вы начинаете с $, а некоторые- нет?
var $kids = $(e.target).children();
var len = $kids.addClass(«hilite»).length;
Ничего таинственного тут нет, просто немного нестандартно… Но имя, начинающееся со знака $ вполне допустимо. В JavaScript правила объявления переменных заключаются в том, что каждый идентификатор должен начинаться с буквы латинского алфавита, символа доллара $ или подчёркивания _, и не может начинаться с цифр и прочих символов, таких как знаки препинания.
извените пожалуйсто что терроризирую вас,
просто понять не могу.
1й вопрос:
как обратится к родителю (есть параграф P в нем поле ввода чекбокс, мне нужно вставить именно в этот параграф на лету созданный элемент.)?
пример хтмл :
(p)
($newElement)
($thisElement)
(/p)
Делаю так:
$(«p»).prev($thisElement).prepend($newElement);
но почему то поле ввода создается не только в этом параграфе . привязку по id делать не хочу.
и второй вопрос, не нашел как при каком нибудь событии,допустим click , удалить элемент.
empty() что то не помогает к сожалению.
По второму вопросу – Вам пожет remove(), который удалит элемент, а empty() всего лишь «очищает» его «внутренности».
Что касается первого вопроса, очевидно, что Вам просто не много не хватает знаний по селекторам jQuery. Селектор $(«p») отберет в набор все параграфы. А вот как выбрать нужный Вам, по id, или по имени класса, или по положению в иерархии и т.д. и т.п. – об этом есть в статьях про селекторы.
См. в карте сайта
извините что вопрос несколько не по этой теме.
при динамической модификацией страниц (работа с ajax) навигация в браузере управляется не так как хочется.
можно ли ее заблокировать совсем или подкладывать в кнопки «вперед/назад» свои ссылки или заглушки с событиями ?
Сделайте ссылку «Версия для печати».
Вот прочитал про hasClass но так и не могу понять как с ним работать.
Вот у меня есть обработчик ссылок
$(‘a[href^=http://]‘).addClass(‘ext_link’).attr(‘target’, ‘_blank’);
Он на все ссылки добавляет класс ‘ext_link’ потом аналогичным примерно кодом я убираю его с локальных ссылок.
Тем самым class ‘ext_link’ остаётся только на внешних.
Как мне теперь выбрать все ссылки с этим классом для обработки? Ну например я хочу из http://www.example.com получить http://www.mydomain.com?go=www.example.com
Уже второй день бьюсь =(
Тем самым class ‘ext_link’ остаётся только на внешних.
Как мне теперь выбрать все ссылки с этим классом для обработки?
$(‘a.ext_link’).и_далее_что-то_делаете
Большое спасибо, оказывается всё было так просто…
Здравствуйте.
А можно как-то получить доступ к тегу находящемуся за искомым? например: a.active, за ним идет p, а потом точно div. Как можно получить доступ к элементу, если я знаю, что перед ним будет ссылка класса active внутри параграфа?
Не могу разобраться как отыскать div идущий после a.active в таком фрагменте:
Отличный ресурс по JQuery. Спасибо.
Если по Вашему описанию действовать, то так:
var myDiv = $("a.active").next("p").next("div");Но может можно что-то изящнее придумать, надо видеть разметку…
оперативный ответ)
огромное спасибо!
А как узнать позицию определенного элемента в наборе ?
например мы вешаем .click на все ссылки и как узнать позицию(порядковый номер) ссылки по которой произведен клик внутри набора ссылок?
$("a").click(function(){ alert($("a").index(this)); });Спасибо!
А как совершить обход и запустить функцию сразу к нескольким элементам? Скажем, есть у меня форма, я должен запустить функцию, только если определённые поля в ней заполнены. Как мне при заполнении одного поля проверять заполнены ли ВСЕ остальные?
Как узнать порядковый номер элемента для div с определённым id?
Пусть есть штук семь div’ов с id – one, two, three,…, seven. Тогда так примерно:
$('div').each(function(i){ if($(this).attr('id') == 'four') { alert(i); } });В alert’е будет 3 – порядковый номер элемента в наборе.
Спасибо
Спасибо за статью, довольно четко все изложено!
У меня вопрос. Как сделать нумерацию, например ссылок, только отдельно в родительском элементе?
Метод $(«a»).index(this) нумерует с самого начала документа, а мне надо что бы при нажатии на ссылку выскакивал ее порядковый номер в родительском элемнте.
Несложно. Можно же использовать контекст, в котором будет происходить выбор элементов. Ну так примерно:
$('a').click(function(){ alert($('a', $(this).parent()).index(this)); return false; });Согласен. Но у меня есть пример
Обсуждения позиций каталога
извените, не знаю как добавить html код
div(0)
p(0)Обсуждения позиций каталога /p
div(0)
p(0)21.05/p
a(0)Для руководителей/a
a(1)Для персонала/a
a(2)Для посетителей/a
/div
div(1)
p(0)21.05/p
a(0)Для руководителей/a
a(1)Для персонала/a
a(2)Для посетителей/a
a(3)Другое/a
/div
div(2) /div
так я думаю понятно…
Если честно – то непонятно. Вы просили пример с выводом индекса ссылки в наборе ссылок того родителя, где присутствует ссылка по которой кликнули.
Я Вам такой код и набросал – кликаешь по ссылке и обработчик находит индекс той самой ссылки по которой кликнули среди всех ссылок родительского элемента, а не вообще всех…
Разве не это Вы имели ввиду?
Обсуждение статьи можно продолжить на форуме jQuery.