#javascript #jquery #css #jquery-selectors
#javascript #jquery #css #jquery-селекторы
Вопрос:
У меня есть этот небольшой скрипт:
<input name="n1" value="test">
<br/><span></span>
<br/>
<span style="background-color:red">after input</span>
и вот js:
$('input[name=n1] ~ span:first').html('new content');
это работает нормально, пока я не изменю ‘br’ (после ввода) на ‘p’. Это ошибка jQuery или мой запрос неверен? Спасибо.
Комментарии:
1. Ну, если вы поставите <p> , то span больше не будет родственным.
2.Всегда проверяйте сгенерированный HTML Совет:. Тогда вы бы обратили внимание на
<p />
тег и на то, какие проблемы он создает (<p>
это не самозакрывающийся тег). Итак, ответ таков: ни это ошибка, ни селектор неправильный. Ваш HTML был.3. Пример, который вы привели в этом вопросе (не в скрипке), работает так, как ожидалось. Он выбирает первый родственный элемент span, появляющийся после ввода, и устанавливает содержимое в
"new content"
. Этот интервал — пустой интервал, который вы добавили после<br>
тега.
Ответ №1:
Вот HTML, который у вас был в этом jsFiddle
<span style="background-color:red">before input</span><p/>
<input name="n1" value="test">
<br/><span></span>
<span style="background-color:red">after input</span>
Если я избавлюсь от <p/>
в конце первой строки, то скрипт будет работать нормально, если я изменю <br/>
после ввода на <p>
.
Работает следующий пример
<span style="background-color:red">before input</span>
<input name="n1" value="test">
<p></p><span></span>
<span style="background-color:red">after input</span>
Вот обновленная скрипка: http://jsfiddle.net/gmAjC/2
Прочитайте больше информации о самозакрывающихся тегах (и почему <p/>
это недопустимо) здесь: http://www.456bereastreet.com/archive/201005/void_empty_elements_and_self-closing_start_tags_in_html/
Комментарии:
1. Оказывается, jquery не очень любит самозакрывающиеся теги 🙂 всем спасибо.
2. Как ни странно, jQuery будет учитывать самозакрывающиеся
<p/>
теги при создании элементов: jsfiddle.net/FG7qJ