Проблема с выбором родственных файлов jQuery?

#javascript #jquery #css #jquery-selectors

#javascript #jquery #css #jquery-селекторы

Вопрос:

У меня есть этот небольшой скрипт:

http://jsfiddle.net/gmAjC/

 <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