.children () Селектор jQuery возвращает детей на много уровней - PullRequest
3 голосов
/ 12 декабря 2011

У меня есть следующий код HTML и jQuery:

<div id="outer">
 <p>
    <p>paragraph inside division.</p>
    <h2>a heading</h2>
    <ul>
        <li>first item</li>
        <li>second item</li>
    </ul>
 </p>
</div>

jQuery:

$(function() {
    $divChildren = $('div#outer').children();
    $divChildren.each(function(){
        $(this).css('background-color', 'red'); 
    });
    alert($divChildren.length); 
});

Из того, что я вижу, нет.у ближайших детей, которые <div id="outer"> имеет, должно быть 1, но jQuery видит 4. Почему это?Однако, если все внутри '#outer' было заключено в другой div (вместо

), то он видит только 1 непосредственного потомка (как и ожидалось).

РЕДАКТИРОВАТЬ: Это определенно некорректная проблема с вложением HTML (и всем спасибо за ответ).Но мой вопрос, более уместно, должен был звучать так: осведомлен ли jQuery о правилах вложения HTML и применяет ли он правила построения дерева DOM (что накладывает правила вложения), а jQuery просто возвращает то, что видит в дереве DOM?

Ответы [ 2 ]

7 голосов
/ 12 декабря 2011

К сожалению, элементы <p> не могут содержать другие элементы <p>. Вот так работает HTML. Вам нужно будет использовать <div> вместо.

5 голосов
/ 12 декабря 2011

Ваш HTML-код недействителен.Вы не можете поместить p тег внутрь p тега

Элемент абзаца может содержаться внутри элементов «адрес», «апплет», «блок цитата», «тело», «кнопка», «центр», "del", "dd", "div", "fieldset", "form", "iframe", "ins", "li", "map", "noframes", "noscript", "object", "td "и" th ".

Встроенные элементы HTML являются единственными элементами, которые могут содержаться в элементе абзаца.

  • a - Якорь, который используется для создания ссылки надругая страница или местоположение в HTML.
  • abbr - Обозначает аббревиатуру.
  • acronym - Обозначает аббревиатуру.
  • area - Определяет область карты в изображении.
  • b - Bold заставляет текст между начальным и конечным тегом выделяться жирным шрифтом.
  • basefont - позволяет изменять шрифт.
  • bdo - переопределяет направление текста значениями ltr (слева).вправо) или rtl (справа налево).
  • big - Устанавливает большой размер текста.
  • br - Разрыв - это разрыв строки, похожий на возврат каретки и строкуfeed в большинстве документов.
  • cite - Используется для маркировки названий статей или других публикаций.
  • code - обозначает код компьютерной программы.
  • dfn - обозначает определение.
  • em - обозначает выделение
  • шрифт - разрешает изменение шрифта.
  • i - устанавливает текст между тегами курсивом
  • img - позволяет размещать графическое изображение встраницы.
  • input - Форма ввода
  • ins - Обозначает вставленный текст.
  • kbd - Обозначает информацию, набранную с клавиатуры.
  • param - Используется длядобавить дополнительные параметры к объекту или элементам апплета.
  • q - Используется для коротких цитат
  • s - Зачеркнуть текст
  • samp - Обозначает образец.
  • small - Устанавливает размер текста в small
  • span - Контейнер, используемый для установки специального стиля для определенных областей страницы.
  • strike - Устанавливает текст, чтобы через него была проведена линия.
  • сильный - обозначает сильный акцент, который в основном выделен жирным шрифтом
  • sub - Subscript
  • sup - Superscript
  • textarea - Форма для многострочного ввода текста.
  • tt - Устанавливает стиль текста для моноширинного телетайпа
  • u- Устанавливает текст, подчеркнутый между начальным и конечным тегом.
  • var - Обозначает переменную в программе.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...