2014-10-12 4 views
1

Есть ли способ получить ссылку на контейнер функции Javascript?Получить элемент DOM, содержащий фрагмент Javascript

В качестве примера:

<div> 
    <script> 
    var thisDiv = ??? 
    doSomething(thisDiv); 
    </script> 
</div> 

Похоже, что ключевое слово this относится только к содержащему элементу, когда он запускается путем прямым событием, такие как onClick(). В противном случае this относится к содержащему элементу window. Есть ли эквивалентный способ получения родительского или содержащего элемента фрагмента <script>?

+2

Связанный: [Как я могу ссылаться на тег скрипта, который загружал исполняемый скрипт в настоящее время?] (Http://stackoverflow.com/q/403967/218196). FYI, элементы не создают * scope *. Существует только глобальная область действия и функции. Элемент сценария не создает область видимости. –

+0

@FelixKling: Спасибо. Я просто использовал «сферу» из-за отсутствия лучшего слова. Я изменю название, чтобы устранить любую двусмысленность. – jbx

ответ

1

полностью надежный подход. Ближе всего вы можете найти последний элемент сценария в DOM (с document.getElementsByTagName), а затем перейти оттуда (parentNode и др.).

Это может сломаться, если элемент сценария был вставлен динамически или используется defer или async.

+1

Если возможно, вам лучше не использовать идентификаторы div, содержащие скрипты. –

+0

Что делать, если я объединю «parentNode» вашего решения с предлагаемым решением в ссылке @FelixKling, например: 'var thisDiv = document. currentScript.parentNode; '. Будет ли это работать? – jbx

Смежные вопросы