1

スクリプト タグに id 属性を持たずに、現在実行中のスクリプト ノードの親ノードを取得する JavaScript の方法はありますか?

私が何を意味するかを説明するために、ドキュメントに img を追加したい場合、その画像を ID "div1_id" の div ノードに追加したい場合、div の ID を知らなくても、または追加する必要がなくても、それを行うことができますか?以下で行う必要があるように、スクリプトタグに id="_scriptid" 属性を追加しますか?

<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 要素が閉じられていない。KB の記事では、直接の親に追加すると (そのタグが明らかに閉じられていなくても) 問題が解決することが示唆されています。

ありがとう。

4

2 に答える 2

0

あなたの問題の解決策は、問題を再考することにあると思います。

まず第一に、あなたは IE8 に問題があると言っています。私のアドバイス: ブラウザー固有の問題をすべて処理する jQuery などの Javascript ライブラリを使用してください。

次に、内部にスクリプトを含むいくつかの div があり、div またはスクリプトに一意の ID を与えたくない場合。それにもかかわらず、関数を呼び出すには、div に seomthing を配置する必要があります。私のアドバイス: 代わりにクラスを使用してください。

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

これはどのように役立ちますか?jQuery と組み合わせると、次のような問題の解決策が得られます。

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

$(".callFn1") を使用すると、クラス "callFn1" を含むすべての要素を選択し、.each は選択したすべての要素を反復処理して関数を呼び出します。この関数は、パラメーター this を指定して fn1 を呼び出します。これにより、現在処理されている要素が得られます。今しなければならないことは、関数 fn1 を次のように少し変更することだけです。

function fn1(x)
于 2011-01-05T14:40:28.427 に答える
0

コードを関数に割り当ててから、それを window.onload 変数に割り当ててみてください

于 2011-01-05T14:33:48.797 に答える