Селектор потомков jQuery выбирает все элементы на странице?

#jquery #jquery-selectors

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

Вопрос:

Код и тестовый пример в jsbin

По сути, $("#div-pmdialog span") кажется, что он выбирает все области на странице, тогда как, насколько я понимаю, он должен находить только те области, которые являются потомками $("#div-pmdialog") . Что я делаю не так?

Ответ №1:

Ваш HTML не анализируется так, как вы ожидаете. Инспектор DOM сообщает, что он анализируется как:

 <div id="div-pmdialog">
    <p><span>hello</span></p><div id="div-pmdialog-text"><p></p>
  </div>

  <div id="div-indypcs-error"><span style="background-color:green">hello</span></div>    
</div>
  

HTML — это не XML. В HTML4 и более ранних версиях самозакрывающиеся теги были недоступны, в основном потому, что браузеры просто игнорировали косую черту. Я полагаю, что HTML5 указывает, что некоторые теги могут быть «самозакрывающимися», но только те, которые никогда не могут иметь никакого содержимого, например <img> , или <br> .

Ответ №2:

Ваш jQuery действителен. Ваш HTML-код — нет.

Вот, проверьте это: http://jsbin.com/iqazus/6/edit

Все div span элементы и должны иметь закрывающие теги.

Ответ №3:

Проблема вызвана использованием вами коротких тегов в элементах <span> and <div> . Это работает здесь: http://jsbin.com/iqazus/9/edit#preview

Ответ №4:

хрмммм попробуйте «span#div-pmdialog»