css, html, php, javascript, jQuery, ajax … – решения, примеры, рецепты
28 Май
После знакомства с этим разделом документации jQuery Вы сможете с легкостью манипулировать элементами объектной модели документа. Сегодня мы научимся вставлять, обертывать, замещать, копировать и удалять элементы DOM.
Правда начнем мы с нескольких методов, которые уже изучали в статье jQuery API: Attributes – атрибуты, но памятуя о том, что повторение – мать учения, это будет далеко не лишним. Тем более, что их использование вполне укладывается в понятие манипулирования объектной моделью документа.
возвращает: 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.");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Добавляет контент внутрь всех выбранных элементов ПОСЛЕ существующего контента. Эта операция подобна применению appendChild.
В этом примере мы добавляем некий HTML-код в конец всех параграфов.
$("p").append("<strong>ПРЕВЕД!</strong>");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Добавляет все выбранные элементы в другой набор элементов ПОСЛЕ существующего контента. Эта операция обратна использованию выражения $(A).append(B), которое добавляет B в A. Здесь же A будет добавлено в B. Просто сравните с примером append().
В этом примере все элементы span добавляются в элемент, который имеет атрибут id «foo», ПОСЛЕ существующего там контента.
$("span").appendTo("#foo");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Добавляет контент внутрь всех выбранных элементов ДО существующего контента. Это наилучшее решение, чтобы вставлять элементы в самое начало.
В этом примере мы добавляем некий HTML-код в начало всех параграфов.
$("p").prepend("<strong>ПРЕВЕД </strong>");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Добавляет все выбранные элементы в другой набор элементов ДО существующего контента. Эта операция обратна использованию выражения $(A).prepend(B), которое добавляет B в A. Здесь же A будет добавлено в B. Просто сравните с примером prepend().
В этом примере все элементы span добавляются в элемент, который имеет атрибут id «foo», ДО существующего там контента.
$("span").prependTo("#foo");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Вставляет контент ПОСЛЕ каждого выбранного элемента.
В примере вставляем некоторый HTML-код ПОСЛЕ всех параграфов.
$("p").after("<strong>Hello</strong>");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Вставляет контент ПЕРЕД каждым выбранным элементом.
В примере вставляем некоторый HTML-код ПЕРЕД всеми параграфами.
$("p").before("<strong>Hello</strong>");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Вставляет все выбранные элементы ПОСЛЕ других, определенных в insertAfter. Эта операция обратна использованию выражения $(A).after(B), где B вставляется после A. Здесь же А вставляется после В. Просто сравните с примером after().
В примере мы вставляем все параграфы ПОСЛЕ элемента, который имеет атрибут id «foo». Тоже самое можно было бы сделать, написав: $(«#foo»).after(«p»)
$("p").insertAfter("#foo");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Вставляет все выбранные элементы ПЕРЕД другими, определенными в insertBefore. Эта операция обратна использованию выражения $(A).before(B), где B вставляется после A. Здесь же А вставляется после В. Просто сравните с примером before().
В этом примере мы вставляем все параграфы ПЕРЕД элементом, который имеет атрибут id «foo». Тоже самое можно было бы сделать, написав: $(«#foo»).before(«p»)
$("p").insertBefore("#foo");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Оборачивает каждый элемент набора в элемент-обертку. Это может быть полезно при инъекции дополнительной структуры в документ, без нарушения оригинального семантического качества документа.
В этом примере оборачиваем новый элемент div вокруг каждого параграфа. В качестве аргумента выступает HTML-код.
$("p").wrap("<div></div>");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Оборачивает каждый элемент набора в единственный элемент-обертку.
В этом примере оборачиваем новый элемент div вокруг каждого параграфа. В качестве аргумента выступает вновь созданный элемент DOM.
$("p").wrap(document.createElement("div"));
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Оборачивает все элементы набора в единственный элемент-обертку. Это может быть полезно при инъекции дополнительной структуры в документ, без нарушения оригинального семантического качества документа.
В этом примере оборачиваем новый элемент div вокруг всех параграфов. В качестве аргумента выступает HTML-код.
$("p").wrapAll("<div></div>");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Оборачивает все элементы набора в единственный элемент-обертку.
В этом примере оборачиваем новый элемент div вокруг всех параграфов. В качестве аргумента выступает вновь созданный элемент DOM.
$("p").wrapAll(document.createElement("div"));
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Обертывает внутреннее содержимое каждого элемента набора (включая текстовые узлы) в HTML структуру. Это может быть полезно при инъекции дополнительной структуры в документ, без нарушения оригинального семантического качества документа.
В этом примере мы выбираем все параграфы и оборачиваем в тэг b их внутреннее содержимое. В качестве аргумента выступает HTML-код.
$("p").wrapInner("<b></b>");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Обертывает внутреннее содержимое каждого элемента набора (включая текстовые узлы) в элемент DOM.
В этом примере мы выбираем все параграфы и оборачиваем в тэг b их внутреннее содержимое. В качестве аргумента выступает вновь созданный элемент DOM.
$("p").wrapInner(document.createElement("b"));
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Замещает все элементы набора HTML или DOM элементами.
В этом примере по клику на кнопке она замещается элементом div с таким же текстом, какой был на кнопке.
$("button").click(function () {
$(this).replaceWith("<div>" + $(this).text() + "</div>");
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Замещает все элемента, определенные в селекторе, указанным(и) элементами. Эта функция дополняет replaceWith(), которая решает ту же задачу, только наоборот.
В этом примере мы замещаем все параграфы текстом, заключенным в тэги b.
$("<b>Параграф.</b>").replaceAll("p");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Удаляет все узлы-потомки (включая текстовые узлы) из набора элементов. Начиная с версии 1.2.2 также удаляет все обработчики событий и внутренние кэшированные данные.
В этом примере по клику на кнопке удаляем все узлы-потомки из всех параграфов.
$("button").click(function () {
$("p").empty();
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Удаляет все выбранные элементы из DOM. Однако при этом они не будут удалены из объекта jQuery, что позволяет использовать их в будущем. Начиная с версии 1.2.2 также удаляет все обработчики событий и внутренние кэшированные данные. Таким образом
$("#foo").remove().appendTo("#bar");
должен быть записан как
$("#foo").appendTo("#bar");
чтобы избежать потери обработчика событий. Опционально может быть использовано фильтрующее выражение expr.
В этом примере по клику на кнопке мы удаляем все параграфы из DOM.
$("button").click(function () {
$("p").remove();
});
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Клонирует выбранные элементы DOM и выбирает клонированные. Наверное немного непонятно, но после рассмотрения примера будет намного яснее. Это полезно при перемещении копий элементов на другую позицию в объектной модели документа (DOM).
В этом примере мы клонируем все элементы b (и выбираем клонированные) и вставляем их перед параграфами.
$("b").clone().prependTo("p");
Откройте пример в отдельном окне и посмотрите исходный код.
возвращает: jQuery
Клонирует выбранные элементы DOM, и все их обработчики событий и выбирает клонированные. Это полезно при перемещении копий элементов и их обработчиков событий на другую позицию в объектной модели документа (DOM).
В этом примере мы создаем кнопку, которая может клонировать сама себя и иметь клонов, также способных себя же клонировать. Гм, попробуйте лучше понажимать эту кнопку…
$("button").click(function(){
$(this).clone(true).insertAfter(this);
});
Откройте пример в отдельном окне и посмотрите исходный код.
Ну вот и все… На сегодня. Потому что интересного в библиотеке jQuery еще очень и очень много.
Отзывов (68) на «jQuery API: Manipulation – манипуляции элементами DOM.»
Супер ! Спасибо , всё легко и понятно .
Привет!
Хороший и полезный ресурс.
Во-первых спасибо за сайт
Во-вторых вопрос. Совсем недавно стал изучать JQuery и вот столкнулся с такой проблемой. Есть табличка в которой я клонрую строки. В строке есть поле при клики не которое строка должна пропадать, но дело в том, что функция на событие не работает
Я так понимаю, что на созданные динамически элементы HTML нельзя повесить функцию обработки события или я что-то не так делаю? Подскажите, пожалуйста.
Простите :-[ Не дочитал до конца
про «clone(true)»
Попробовал метод contents() для извлечения содержимого тега iframe и не получил признаков того, что он работает в Opera 9.62 или в MSIE 7 (JQuery 1.2.6). Пробовал разные варианты такой команды:
$(«div»).append($(«iframe»).contents().find(«img»))
Может, кто-то еще пробовал? поделитесь опытом…
contens(text) должен принимать аргументом строку, содержащую текст, который необходимо найти.
Gennady, Вы путаете, две разные функции:
1. contains(text)
Matches elements which contain the given text.
2. contents()
Find all the child nodes inside the matched elements (including text nodes), or the content document, if the element is an iframe.
Информация из visualjquery.com
Да, признаюсь, поторопился с ответом… В голове почему-то сидела именно contains(text)
Скиньте мне Ваш код полностью – я посмотрю в чем там собака порылась. Этот метод должен вполне нормально работать везде…
Получил новые экпериментальные данные
.
В локальную папку поместил два файла
1.htm
$(«div»).append($(«iframe»).contents().find(«img»))
2.htm
Запустил 1.htm в Opera9.62 – работает
Запустил MSIE7 – не работает
Признак срабатывания: картинка из iframe перескакивает под разделитель
Потом разместил те же файлы на сервере – не работает ни в Opera9.62 ни в MSIE7.
Интернет слухи говорят, что DOM+iframe – довольно неустойчивая связка.
Еще. На том же visualjquery.com обнаружил два примера для contents(), и оба не работает…
Если в ближайшие дни удастся выбрать свободное время – обязательно поэксперементирую. Заинтересовало. Результат конечно отпишу…
Вот вы в статье пишите что
————
remove(expr)
возвращает: jQuery
Удаляет все выбранные элементы из DOM. Однако при этом они не будут удалены из объекта jQuery, что позволяет использовать их в будущем.
———–
А каким образом мне взять эти удаленные элементы. Как правильно прописать?
Ну предположим есть простенькая страница – head, body… А в body например пара div’ов и table с несколькими строками (ес-но и td тоже есть, и в них какие-то данные). Предположим, что Вы удаляете таблицу так:
var obj = $(‘table’).remove(); // удалили таблицу
а теперь надо «вспомнить» сколько всего было в этой таблице элементов td…
Можно вот так:
alert($(obj).find(‘td’).length);
мм дейстивительно
у меня есть такой список
Добавить
Имя бла бла бла
сообщение блаблабла
Редактировать
удалить
….
….
Когда кто либо добавляет сообщение оно через ajax Записываеться в базу mysql
но при этом мне нужно вывести его в
кодгда вывожу через $().html получаеться что ничего не работает
и если сделать append то послднее тоже не работает
тк. динамический html
может быть подскажете что делать в такой сютуации?
опять забыл про то что сьедаеться (
Никаких проблем тут быть не должно – все стандартно. Если Вы используете $.ajax(options) для отправки ajax-запроса к файлу-обработчику на сервере. В этом файле после записи данных в базу, надо им же просто сделать print…. А в опции success Вашего запроса просто вставить ответ от сервера в нужное место. Ну например:
$(«button»).click(function() {
$.ajax({
type: «POST»,
url: test.php,
data: «id=1&val=abc»,
beforeSend: function(){
$(«#data»).html(«<img src=’loading.gif’ alt=’Запрашиваю сервер…’ />»);
},
success: function(answ){
$(«#data»).html(answ);
}
});
});
При клике на button к файлу test.php будет отправлен POST-запрос и переданы параметры id и val. Перед отправкой запроса в элемент с идентификатором #data будет подставлена картинка. Как только этот запрос будет завершен, вместо нее будет подставлен ответ от сервера.
если аяксом я получаю контент в котором мне, так же нужно использовать jquery.
все фукции относящиеся к этому файлу должны быть записанны в нём, или можно их оставить на страничке куда я вывожу файл?
Обработчики подгружаются вместе с контентом. Если оставите код обработчиков для подгружаемых через ajax элементов на основной странице – это естественно не будет работать.
Есть конечно альтернатива, но она имхо не лучше.
как быть с такой ошибкой ?
unterminated string literal
это происходит от символа /n
я написал так
$text=ereg_replace(«(\r\n|\n|\r)», «», $text);
оказалось что это не выход
ибо в jqury код тоже подставляется
, а писать его в одну строку не айс (
Здравствуйте Геннадий!
Столкнулся с тем, что код Jquery перестает работать. Код находится у меня в xsl шаблоне, что бы xsl не ругался код заключен в тег .
<![CDATA[
$(document).ready(function(){
$("p").after("Привет");
});
]]>
Если я вставляю в код символы скобок тега div, то код отказывается работать и выдает ошибку в firefox(syntax error <![CDATA[\n ). Такая же ошибка происходит, если я создаю $.ajax запрос и параметры запроса разделяю символом &, пришлось использовать запрос $.post, т.к. в нем не надо использовать разделитель. В html коде страницы отображается все также как и в шаблоне xsl, не пойму почему когда я использую символы «&» возникает ошибка?
Не очень силен в xsl – может все-таки проблема именно в спецсимволах? Т.е. «&» или просто «&». Может попробовать варианты? Или тогда xsl ругается?
Проблему решил, надо было всего лишь обрамить код тегом xst:text с параметром disable-output-escaping=»yes»
<![CDATA[
Сам КОД
]]>
Добрый день!
Я не могу разобраться как удалить обертку, чтобы содержимое обертки осталось. Т.е. как сделать обратное wrap()?
Ну, вероятно сохранить содержимое в переменную, удалить обертку с помощью remove() и вставить в нужное место сохраненное содержимое. Наверное так.
Да… Если нужно не удалить, а заменить обертку, то подойдет replaceWith().
Рассуждаю я примерно также…
1.Как именно выделить содержимое дива с id=»my». Я знаю как выделить содержимое только вместе с DIV.
2. Как вставить все содержимое в нужное место, если у нас несколько дивов с одним id и каждый содержит разную информацию.
Можно пример кода выложить? Чтоб было на что опереться, т.к. сам я плохо знаю последовательность того, что мы делаем (в плане jQ).
1.Как именно выделить содержимое дива с id=”my”.
var somevar = $(‘#my’).contents();
в переменной somevar окажется то, что находилось внутри #my.
2. Как вставить все содержимое в нужное место
$(«#target»).append(somevar);
вот насчет нескольких дивов с одним id…. id – это идентификатор, он обязан быть уникален в пределах документа. Прогоните страницу через валидатор http://validator.w3.org/ и почитайте, что он Вам скажет.
Не совсем ясно как рабоатет $(”#target”).
насчет нескольких дивов с одним id… ну немного изменим задачу, скажем работаетм не с DIV, а с p – абзацем. Мысль в том, что есть несколько элементов. Т.е. насколько я понимаю должно быть так.
Содержимое 1 p должно потом вставляться в 1 место,
содержимое 2 p, которое отличается от 1, должно вставляться в 2 место и тд.
А так он все получается должет склеить между собсой.
AlexPTS, Вы можете четко изложить задачу? Как в ТЗ? Я Вам набросаю код.
Пример с p
…Привет мир…
…здраствуй…
нужно сделать так
…Привет мир…
…драствуй…
Пример с p
…<div><p>Привет мир</p></div>…
…<div><p>здраствуй</p></div>…
нужно сделать так
…<div>Привет мир</div>…
…<div>драствуй</div>…
Т.е. сделать что-то обратное .warp() для любого тега html
$('div p').each(function(){ var txt = $(this).text(); var prnt = $(this).parent(); $(this).remove(); prnt.text(txt); });Выбираем все элементы p внутри div и проходим по набору с помощью метода each(callback), применяя для каждого элемента следующие действия:
- в переменной txt запоминаем текст параграфа;
- в переменной prnt сохраняем ссылку на родителя этого конкретного параграфа – элемент div;
- удаляем параграф;
- вставляем текст в элемент div;
Чтобы убедиться, что это работает, с помощью CSS задайте цвет шрифта в p – синий, а в div – красный. Соответственно и увидите изменения – как только код отработает цвет шрифта изменится с синего на красный, поскольку будет находиться уже не в p, а в div.
Вообще вопрос интересный – может кто-то предложит более элегантное решение?
Что-то криво работает… удаляет лишние элементы.
Мне подсказали, что можно попробывать сделать так:
………………………………………………………………
через :eq()
подсчитай сколько всего р на странице, затем через фор обработай каждый
подсчитать сколько всего можно так кажется – $(‘p’).length
for(var i=0; i<arr.length; i++) {
… сделать что-то с arr[i] …
}
…………………………………………………………………….
To AlexPTS:
Он не криво работает – он работает с теми элементами, которые попали в набор! Т.е. приведенный код выбирает все элементы p, родителем которого является div. Если у Вас реальная страница – Вам надо изучить ее HTML-разметку и понять логику по которой производить отбор элементов. А еще лучше – внимательным образом прочитать статьи про селекторы – тогда у Вас проблем будет меньше.
Про селекторы я немного понял… С CSS тоже немного знаком.
>>Что-то криво работает
Т.е. в данном примере работает все верно, но если немного усложнить, то конструкция неуниверсальная.
Допустим у нас внутри тэгов p есть еще html теги a, почемуто удаляются строчки с содержимом a (не везде!), хоть они и не заключены в p.
А второй вариант есть мысли как можно реализовать? (через for…)
>> Т.е. в данном примере работает все верно, но если немного усложнить, то конструкция неуниверсальная.
Вот именно поэтому я и пытаюсь обратить Ваше внимание на селекторы. Прежде всего с их помощью нужно выбрать именно те элементы, с которыми будете работать. Я же в предыдущем отзыве об этом и писал как раз.
Что касается второго варианта – если обратили внимание, он тоже начинается с выбора элементов. А как с ними работать через цикл for или через предоставляемый библиотекой метод each(callback) – дело вкуса.
Поймите, я не буду делать это за Вас, в конце концов у меня не так много времени. Я просто хочу, чтобы Вы поняли смысл того, что Вы делаете. Иначе в следующий раз Вы будете точно так же мучаться.
За each(callback) спасибо огромное! Буду копать в этом направлении.
$(‘eeee’).appendTo(«html»)
в IE не работатет. В интернете пишут, что если код не валидный, то IE работать не будет.
Можно ли как-то для IE добиться подобного результата?
Я не очень понимаю, что за ееее и зачем его нужно вставлять в html?
$('body').append('<p>'); $('<p>').appendTo('body');эти две строки делают одно и тоже – создают и вставляют элемент p в body. И работает это во всех браузерах…
Поясните мне, что такого хитрого пытаются сделать те, кто пишет в интернете, пытаясь вставлять нечно в html? Может я что-то не понимаю и оно действительно нужно?
То что я делаю можно посмотреть сейчас на моем блоге в браузере IE. Т.е. для всех пользователе IE всплывает окошечко с рекоммендацией обратить внимание на «нормальный» браузер.
Я хочу чтобы этот скрипт сам создавал html код для пользователей IE. Чтобы html код не грузилась для всех пользователей как сейчас. Делаю это с помощью .appendTo . В FF и Opera работает, в IE нет. Делать код валидным не представляется возможность. Отсюда и вопрос, как достичь похожего результата в IE. Т.к. работать это будет только с IE.
Сейчас у Вас так и происходит – в IE появляется окно, в FF и Opera – нет. Или я не понимаю Вас, или задача все-таки формулируется немного по-другому – может быть Вы имеете ввиду, что надо средствами jQuery определить браузер и показывать окно только в браузерах IE?
Я готов помочь, но пока не могу понять, что именно надо реализовать.
Я разобрался ))) Все равно огромное вам спасибо.
не работало .appendTo(”html”), .appendTo(”#myID”) стал работать )
Вопрос может быть не совсем в тот пост, но все же. Как с помощью jQ создать CSS для только что созданного html кода?
Пробывал конструкцию
.css({
background:»#FFFFFF»,
border:»1px solid #333333″,
height:»250px»,
position:»fixed»,
width:»400px»
});
но половина свойств не работают. Может быть можно как-то заставить созданный html код брать стили из общего css файла?
.css({ 'background-color':'#999', border: '5px solid #f00', height: 250, width: 400, position: 'fixed', top: 50, left: 100 });найдите отличия….
- если имя свойства пишется через дефис его надо заключить в кавычки;
- ширина и высота, равно как и свойства top и left (иначе position: ‘fixed’ где?) задаются без px, только цифрами;
ок )) Почти все получилось. Спасибо!
Здравствуйте, очень нужна помощь
Не подскажете почему в примере:
$(document).ready(function() {
$(«#button»).click(function() {
alert($(«#elem»).html());
});
});
Если изменить значение текстового поля допустим на «kuku2″, то в html все равно возвращается текстовое поле со значением «kuku»?
Задача как бы просто глобальнее, мне надо собрать поля всевозможных типов из формы и сохранить их в переменной. Но html() все время отдает поля с теми значениями, которые были при их первом появлении на странице. И если не html(), то можно как-то собрать всевозможные поля именно в их хтмл эквиваленте?
Простите пример не вставился
Пишу здесь
<div id=»elem»><input type=»text» value=»kuku» /></div><input type=»button» id=»button» value=»Click me» />
Ваша ошибка в том, что Вы пытаетесь получить содержимое #elem в виде html, т.е. как Вы просите, так он и работает. Для того, чтобы получать значение поля, Вам надо обращаться сразу к элементу input, например:
var data = $(':text').val();в data будет находиться значение, введенное в текстовое поле.
Если же говорить о всей Вашей задаче, то решается она как правило несколько иначе.
Пусть имеется какая-то форма с id, например form, тогда можно упорядочить все данные этой формы в строку запроса можно так:
$('#form').serialize();и все данные готовы к передаче на сервер.
Кстати с помощью похожего метода serializeArray( ) данные можно приготовить в формате JSON.
Сейчас немного распишу задачу
Есть форма, которая формируется из полей всевозможных типов, первоначально получается она ajax-запросом с сервера. Сама форма меняется, при выборе одного из селектов на странице.
Просто если пользователь начал заполнять форму и решил переключить селект, то я хотела бы эту форму сохранить и если пользователь снова возвращается к старому значению в селекте, то уже не слать запрос на сервер, а показать сохраненную форму.
Если бы все поля были текстового типа проблем вообще, конечно, не было бы. А так даже не знаю как поступить
Хм, да…. Сразу так вот и не скажешь с какого боку лучше зайти…
Попробуйте это http://docs.jquery.com/Core/data#name
Не уверен, что это лучший способ, но попробовать можно.
На странице имеется четыре селекта с одинаковыми ID,и одинаковыми значениями. Задача изменить выбранное значение сразу у всех селктов при смене значения у одного из них.
$(«#valuecol_’.$name_poly.’»).change(function () {
var idString = $(this).val(); $(«option[@value="+idString+"]«).attr(«selected», «selected»);
});
Как доработать данный скрипт для того что бы он был привязан к селектам с конкретным ID ?
Юра, я только не могу понять как может быть четыре селекта с одинаковым id? Ведь это идентификатор – он по определению должен быть уникальным и встречаться только один раз на странице.
А доработать – просто указать верный селектор. Для id так:
$('#someId').change(function(){ // здесь все точно так же });учтите еще, что знак @ использовался в версиях jQuery 1.2, а если используете версию 1.3+ – его надо убирать.
Дело в том, что генерируется многоязычная форма. Каждый селект на своем языке, 1 русский селект доступен для выбора и три с параметром дизабле. Хотел сделать что бы при выборе в русском селекте и в других селектах автоматом выбирались значениия по первому.
Геннадий, возможно ли как-то вставить в странцу свой div до того как будет готов DOM ($(document).ready)?
Отобразить пользователю созданный div можно только с помощью методов, которые написаны в этом посте, т.е. вставляется до/после конкретного элемента DOM.
ready() отслеживает момент готовности DOM. Пока DOM не загружена манипулировать с ней естественно нельзя.
Здравствуйте.
Я пытаюсь вставить в ссылку дополнительные span. Такой код
$(«a»).each(function(){
$(this).prepend(»);
$(this).append(»);
})
На выходе я ожидаю получить – О сайте
Но получается всегда закрытым – . Баг ли это jQuery или я что-то делаю не правильно? Т.е. так О сайте . Метод append() закрывающийся тэг тоже не добавляет, ели просто фраза, то ок.
Ваш подход неверен в принципе. То, что Вы хотите сделать, надо делать примерно так:
$('a').each(function(){ $(this).wrapInner("<span></span>"); });в результате такой операции все, что содержится внутри тэга а (включая текстовые узлы), будет заключено в span.
Да, я уже понял, что это делается wrapInner(). Но, в принципе, тот вариант тоже должен был бы сработать… хоть он и не рациональный…
Спасибо, Геннадий!
Добрый день, подскажите можно ли обратится к только что добавленному элементу:
$(«#id»)
.after(«»)
.text(«qwe»)
Например после выполнения этого кода, текст добавлялся не в #id, а в спан..
Что то типа .end() тока наоборот
Там тэги порезало, в .after() добавляем тэг спан
qwe
AlexPTS 30.03.2009 в 21:11
$(’eeee’).appendTo(”html”)
в IE не работатет. В интернете пишут, что если код не валидный, то IE работать не будет.
Можно ли как-то для IE добиться подобного результата?
IE вроде не считаеt HTML главным тэгом, им является BODY, это даже в css хаках используют…
Конструкцию html div{} IE не поймет
To Slip:
Обратиться можно к чему угодно, только я все равно не очень понял вопрос. В спан надо текст вставить? Так вставляйте его прямо в after(). Или что-то другое надо?
-=div=-text-=/div=-
-=input …=-
-=input …=-
-=div=-text-=/div=-
-=input …=-
-=div=-text-=/div=-
$(«input»).after(«div»);
$(«div»).css(…)//так мы обратимся ковсем дивам на странице, которые были до выполнения кода и которые появились после его выполнения…
А как обратиться только к тем которые появились, после выполнения кода??
Подскажите пожалуйста как заменить url на другой, делаю следущее
$(this).attr(«href», ob_attr + ob_title).replace(/alex/, «alexpts»);
где elem_attr это url, но он содержит дополнительные параметры, нужно часть строки заменить в нем с alex на alexpts. Читал про регулярные выражения, но что-то не получается. Находил примеры, где заменятеся слово, а не символы в слове. Но что-то не получается
Можете написать несколько простых примеров использования метода replace().
На самом деле статей по этому поводу много, не стоит повторяться. Ну, например
http://www.pcre.ru/docs/javascript/text/intro1
Вам просто надо очень внимательно читать и все получится. Что же касается примера Вашего кода – он в принципе неверный. С помощью replace() Вы пытаетесь осуществить замену не в строке (как положено). Не знаю, на что у Вас указывает this (из кода это непонятно), но надо предполагать, что на какой-то элемент а (т.е. некий объект, а вовсе не строку!), которому Вы пытаетесь установить атрибут href. Ну и ес-но применение к этой конструкции метода replace() просто бессмысленно.
Может стоит поискать какое-то простое решение? Даже без использования регэкспов?
Да, скорее всего, вы правы.
this это элемент «a». Чтобы искать другие решения, нужно знать «а как бывает еще». Я наверное, действительно, здесь не рациональный способ выбрал и пытаюсь его реализовать.
// AInputText – входной текс
// AReplaceText – текст замены найденых совпадений
// VRegExp – экземпляр объекта RegExp (регулярное выражение)
// VResult – результат полученный после применения регулярного выражения
function GetText(AInputText, AReplaceText) {
var VRegExp = new RegExp(/alex/);
var VResult = AInputText.replace(VRegExp, AReplaceText);
return VResult;
}
Эта функция ищет в строке всех alex и заменяет их на значение в переменной AReplaceText
да jquery это вещь!
у меня такая проблемка – prev() ни с кем не дружит…
$(«.quote»).click(function(){
var reply = $(this).prev().html();
$(«#comment»).append(reply);
});
может ему не нравится, что после него что-то стоит? просто если убрать html(), то норм работает, но не так, а если убрать prev(), то работает не там)) в общем, молю о помощи))
Ваш код должен работать… В Вашем случае this – это тот элемент с классом quote по которому кликнули. Далее идет prev() – значит получаем предыдущий сестринский элемент для того элемента по которому кликнули. Далее извлекаем его содержимое в виде html.
Обсуждение статьи можно продолжить на форуме jQuery.