Получить ссылку на родительский элемент <script>
У меня есть аналогичная проблема, например, опубликованная здесь, но вместо получения родительского идентификатора, как я могу получить ссылку на родителя script без необходимости кода id для тега script?
Например, у меня есть следующий код, введенный на веб-сайт:
<div>
some other html tags
<script src="http://path_to_my_script.js"></script>
</div>
Мне нужно, чтобы в моем файле path_to_my_script.js
я мог получить ссылку на внешний div
.
Существует уловка и заключается в том, что код будет скопирован и вставлен в несколько мест на той же веб-странице, что делает идентификатор бесполезным.
Есть ли возможность сделать это без кода id во всем коде?
Если решение с jQuery лучше: D
Спасибо заранее.
Ответы
Ответ 1
Как упоминалось в Каков текущий элемент в Javascript?, текущий элемент <script>
также является последним элементом <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;
Ответ 2
Вы можете использовать селектор атрибутов, чтобы получить script с определенным src
, затем parent('div')
, чтобы перейти к его содержащему элементу div
.
var parentDiv = $('script[src="path/to/script.js"]').parent('div');
Ответ 3
Вам нужен способ отправить ваш script на. Как еще вы ожидаете узнать, какой script вы хотите? Если у вас есть только один script, вы всегда можете сделать
var myScript = document.getElementsByTagName("script")[0];
чтобы получить элемент DOM первого script на вашей странице. Или вы можете использовать jQuery и выполнить цикл через script, чтобы что-то сделать с каждым:
$("script").each(function() {
alert($(this).html());
});