Мне нужно знать, можно ли получить текущее выполнение node?
Пример:
..html
<script id="x">
console.log(document.currentNode.id); // << this must return "x"
</script>
..html
Спасибо!
Мне нужно знать, можно ли получить текущее выполнение node?
Пример:
..html
<script id="x">
console.log(document.currentNode.id); // << this must return "x"
</script>
..html
Спасибо!
Я не знаю, что на 100% уверен, но коллекция тегов script, возвращаемых document.getElementsByTagName('script')
, не должна включать теги script, которые ниже выполняемого в настоящее время <script>
. Другими словами, я думаю, что это должно работать:
var arrScripts = document.getElementsByTagName('script');
var strScriptTagId = arrScripts[arrScripts.length - 1].id;
Это будет работать только для скриптов, выполняемых при загрузке страницы. Если это выполняется в отложенном script или как часть события загрузки страницы, он, вероятно, всегда будет сообщать о последнем <script>
на полностью отображаемой странице. Обратите внимание, что тег id не является допустимым атрибутом для <script>
, поэтому ваша страница вряд ли будет проверяться. Если у вас есть внешние скрипты, пишущие теги script (например, сторонние объявления), я думаю, что код будет непредсказуемым. Я играл с этой идеей пару лет назад, и результаты были неудовлетворительными.
Gecko (Firefox) поддерживает нестандартное свойство объекта документа, которое указывает на текущий script node. Вы можете проверить это, прежде чем перейти к вышеуказанному ответу.
https://developer.mozilla.org/en-US/docs/DOM/document.currentScript
<script id="x">
console.log(document.currentScript.id); // << this must return "x"
</script>
Andrews Answer уже была хорошей идеей, но я испытал все упомянутые проблемы. Вот почему я выбрал другой подход, который хорошо работает для IE, FF и Chrome.
Просто выполните script в событии onload для изображения. Определение прозрачного 1pixel gif inline, и вы получите "this", когда он срабатывает.
Этот пример используется для динамического изменения содержимого DIV во время рендеринга. Моя цель - заполнить div другим innerHTML, созданным с помощью рендеринга xsl на основе браузера (не показано здесь).
Конечно, вы даже можете загрузить любое изображение из Интернета, чтобы оно не было встроенным. И большое преимущество: изображение и его событие заменяют собой новый контент, поэтому даже изображение исчезнет. "Div" даже не требует каких-либо присвоений "id".
<div id="demo">
empty
<img onLoad="changeNodeOnTheFly(this,'hurra');void(0);" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="/>
</div>
script:
<script>
function changeNodeOnTheFly(ele, text)
{
ele.parentNode.innerHTML=text;
}
</script>
BR Хайко
Используйте document.write, чтобы найти свою позицию:
<script data-foo="bar">
var id = 'placeholder-' + Math.floor(Math.random() * 1e10)
document.write('<div id=' + id + '></div>')
var placeholder = document.getElementById(id)
var script = placeholder.previousSibling
placeholder.parentNode.removeChild(placeholder)
// "bar" is written to the document
document.write(script.getAttribute('data-foo'))
</script>
Почему бы не использовать:
<script id="x">
console.log(document.getElementById("x").id);
</script>