2012-04-24 22 views
23

投稿ID:hereのような類似の問題がありますが、親IDを取得する代わりに、スクリプトタグのIDをコードすることなくスクリプトの親への参照を取得できますか?<script>親要素への参照を取得する

例えば、私はウェブサイトに注入された次のコードを持っている:私は必要なもの

<div> 
    some other html tags 
    <script src="http://path_to_my_script.js"></script> 
</div> 

を私path_to_my_script.jsファイルで、私は外divへの参照を得ることができるということです。

キャッチがあり、同じWebページのいくつかの場所にコードがコピーされ、識別子が役に立たなくなることがあります。

コード全体でIDをコーディングする必要がありますか?

ソリューションはjQueryを使って優れている場合:事前にD

感謝。

+0

より多くの情報/コード – Esailija

+1

を提供してください、あなたは確かに古いブラウザドン」にするためにスクリプトタグにIDを使用しないようにしますか爆破する?それとも別の理由がありますか? – hradac

+0

@エセイリア:投稿を更新しました。私を助けてくれることを願っています:D – diosney

答えて

38

What is the current element in Javascript?で述べたように、現在の<script>要素が実行時にも最後<script>要素、あります。

外部スクリプトの負荷が(asyncまたはdefer属性を使用して)遅延されないため、答えがあなたのケースにも当てはまります。

var scriptTag = document.getElementsByTagName('script'); 
scriptTag = scriptTag[scriptTag.length - 1]; 
var parentTag = scriptTag.parentNode; 

ほとんどのブラウザ(IE6でも)サポートdocument.scripts。 Firefoxはそうバージョン9のように、このオブジェクトをサポートし、次のコードも使用することができます:

var scriptTag = document.scripts[document.scripts.length - 1]; 
var parentTag = scriptTag.parentNode; 
+0

恐ろしい!ありがとう! – diosney

+2

私はこれを私の問題の解決策にしたがっていた。実際、私のアプリケーションはJavaScriptを動的に読み込んでいますが、 'document.scripts'配列には、実際にHTML自体にある唯一のjavascriptファイルしか含まれていません。すべての後でロードされたjsファイルは単にそこにはありません... – RemyNL

1

あなたのスクリプトを参照する方法が必要です。あなたが望むスクリプトを他にどのように知っていると思いますか?スクリプトが1つしかない場合は、ページ上の最初のスクリプトのDOM要素を取得するために、常に

var myScript = document.getElementsByTagName("script")[0]; 

を実行することができます。それとも、それぞれに何かをするためにあなたのスクリプトをjQueryとループを使用することができます。

$("script").each(function() { 
    alert($(this).html()); 
}); 
3

あなたは、その含むdiv要素にジャンプするparent('div')、その後、特定のsrcでスクリプトを取得するには、属性セレクタを使用することができます。

var parentDiv = $('script[src="path/to/script.js"]').parent('div'); 
+0

あなたの回答者に感謝します。スクリプトのソース属性は、ページにコピー&ペーストされたすべてのコードで同じです。 hradacへのコメントを参照してください。これを指摘するために質問を更新します。とにかくお時間をありがとう。 – diosney

+0

もちろん、同じスクリプトを1ページに複数回読み込まないため、スクリプトのパス名を変数に動的に作成し、すぐにセレクタ文字列に挿入することができます。 – Aaron

関連する問題