Obtain a reference to <script> parent element [duplicate]

I have a similar problem like posted here but instead of obtain the parent id, how Can I get a reference to the script parent without having to code an id for the script tag?

For example, I have the following code injected to a website:

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

What I need is that in my path_to_my_script.js file I can get a reference to the outer div.

There is a catch and is that the code will be copied&pasted in several places in the same webpage, which makes an identifier useless.

There is any chance to do that without to code an id in the entire code?

If the solution is with jQuery the better :D

Thanks in advance.

Answers:

Answer

As mentioned in What is the current element in Javascript?, the current <script> element is also the last <script> element, at the time of execution.

The answer also applies to your case, since the load of the external script is not deferred (through the async or defer attribute).

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

Most browsers (even IE6) support document.scripts. Firefox supports this object as of version 9. So, the following code can also be used:

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

You can use the attribute selector to get a script with a specific src, then parent('div') to jump to its containing div element.

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

You need a way to refer your script by. How else do you expect to know which script you want? If you only have one script, you could always do

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

to get a DOM element of the first script on your page. Or you could use jQuery and loop through your script to do something with each:

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

Tags

Recent Questions

Top Questions

Home Tags Terms of Service Privacy Policy DMCA Contact Us

©2020 All rights reserved.