Могу ли я получить в JavaScript узел, в который включен скрипт? - PullRequest
1 голос
/ 05 января 2011

Есть ли способ в JavaScript получить родительский узел выполняемого в данный момент узла скрипта без атрибута id в теге скрипта?

Чтобы проиллюстрировать, что я имею в виду, если я хочу добавитьimg к документу, и я хочу добавить это изображение к узлу div с идентификатором "div1_id", могу ли я сделать это, не зная идентификатора div, или не добавив атрибут id = "_ scriptid" в тег script,как я должен был сделать ниже?

<script type="text/javascript">
    function fn1()
    {
        var my_img = document.createElement("img");
 var t = document.getElementById("_scriptid");
 if (t.parentNode) {
  t.parentNode.appendChild(my_img);
 } else {
  document.getElementsByTagName("body")[0].appendChild(my_img);
 }
    }
</script>

<div id="_div1_id" name="_div1_name">
    <script type="text/javascript" id="_scriptid">
        fn1();
    </script>
</div>

Вот что я хочу сделать:

<head>
  <script type="text/javascript">
    function fn1()
    {
        var my_img = document.createElement("img");
 var x = get the node that is the parent node of the current script tag,
                and so that I can still separate this code out into a function
                as shown here, I do not want the <head> tag returned, I want to
                get the parent node of the script that called this function, i.e.
                the node commented as "div1" below.
 x.appendChild(my_img);
    }
  </script>
</head>

<div>  <!-- div1 -->
    <script type="text/javascript">
        // Call a function to add an image to the enclosing node (div node in this example):
        fn1();
    </script>
</div>

Причина, по которой я спрашиваю, заключается в том, что я заставляю кого-то говорить мне, что они получают ошибкув IE8 «Ошибка синтаксического анализа HTML: невозможно изменить родительский элемент контейнера до закрытия дочернего элемента (KB927917)», и я подозреваю, что это может быть связано с тем, что я использую appendChild для добавления изображения к элементу body, а элемент body не закрывается,В статье базы знаний говорится, что добавление к прямому родителю (даже если этот тег явно не закрыт) решает проблему.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 05 января 2011

Я думаю, что решение вашей проблемы может заключаться в переосмыслении проблемы.

Прежде всего, вы говорите, что у вас проблемы с IE8. Мой совет: используйте библиотеку Javascript, такую ​​как jQuery, которая обрабатывает все эти специфичные для браузера ошибки для вас.

Затем у вас есть некоторые div-ы со скриптами внутри, и вы не хотите давать div-файлам или скриптам уникальные идентификаторы. Тем не менее, вам нужно добавить что-то в ваш div для вызова функции. Мой совет: используйте классы вместо.

<div class="callFn1"></div>

Чем это полезно? В сочетании с jQuery это дает вам следующее решение вашей проблемы:

$(".callFn1").each(
  function() {
    fn1(this);
  });

С помощью $ (". CallFn1") вы выбираете все элементы, которые содержат класс "callFn1", .each выполняет итерацию по всем выбранным элементам и вызывает функцию. Эта функция вызывает fn1 с параметром this - который дает вам текущий элемент, который обрабатывается. Все, что вам нужно сделать сейчас, это немного изменить вашу функцию fn1 так:

function fn1(x)
0 голосов
/ 05 января 2011

Попробуйте назначить свой код функции и затем присвоить его переменной window.onload

...