Простой первый ребенок JS? - PullRequest
0 голосов
/ 24 апреля 2010

Поиск простого обнаружения первого ребенка с помощью javascript (без фреймворка).

Следует добавить класс "first" для первого дочернего элемента. Как css-hacks для ie, но в javascript и html-файле.

Должен работать аналогично :first-child

Когда я говорю «нет фреймворка», я имею в виду такой код:

<script type="text/javascript">document.documentElement.id = "js"</script>

Например:

<div class="terms">
    <dl>
        <dt>Term 1 name</dt>
        <dd>Term 1 description</dd>
    </dl>
    <dl>
        <dt>Term 2 name</dt>
        <dd>Term 2 description</dd>
    </dl>
    <dl>
        <dt>Term 3 name</dt>
        <dd>Term 3 description</dd>
    </dl>
</div>

Три <dl>, первый включает Термин 1.

Этот CSS не будет работать в IE6, поэтому я ищу решение для JavaScript. CSS-хаки не допускаются.

.terms dl:first-child { float: right; }

1 Ответ

2 голосов
/ 24 апреля 2010

Это будет делать то, что вы хотите, но вам действительно нужно добавить id в div, чтобы облегчить его поиск.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
    <style type="text/css">
        .terms { }
        .terms dl.first { float: right; }
    </style>
</head>
<body>
    <div id="terms" class="terms">
        <dl>
            <dt>Term 1 name</dt>
            <dd>
                Term 1 description</dd>
        </dl>
        <dl>
            <dt>Term 2 name</dt>
            <dd>
                Term 2 description</dd>
        </dl>
        <dl>
            <dt>Term 3 name</dt>
            <dd>
                Term 3 description</dd>
        </dl>
    </div>
</body>

<script type="text/javascript">

    function firstChild(element) {
        for (var i = 0; i < element.childNodes.length; i++) {
            var child = element.childNodes[i];
            if (child.nodeType == 1) {
                return child;
            }
        }
    }
    var terms = document.getElementById("terms");

    firstChild(terms).className += " first";

</script>

</html>

Справка:

nodeType Constants
<hr/>
        ELEMENT_NODE                :  1
        ATTRIBUTE_NODE              :  2
        TEXT_NODE                   :  3
        CDATA_SECTION_NODE          :  4
        ENTITY_REFERENCE_NODE       :  5
        ENTITY_NODE                 :  6
        PROCESSING_INSTRUCTION_NODE :  7
        COMMENT_NODE                :  8
        DOCUMENT_NODE               :  9
        DOCUMENT_TYPE_NODE          : 10
        DOCUMENT_FRAGMENT_NODE      : 11
        NOTATION_NODE               : 12
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...