Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/432.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取在JavaScript中从中调用函数的元素_Javascript_Html_Dom - Fatal编程技术网

获取在JavaScript中从中调用函数的元素

获取在JavaScript中从中调用函数的元素,javascript,html,dom,Javascript,Html,Dom,可以从JavaScript中调用的函数中获取HTML元素吗 例如,我的HTML中有: <script type="text/javascript"> function myFunction() { var myContainer = getElementFromWhichFunctionIsCalled(); // Possible? (myContainer.id == 'my-container'); // TRUE } </

可以从JavaScript中调用的函数中获取HTML元素吗

例如,我的HTML中有:

<script type="text/javascript">
    function myFunction() {
        var myContainer = getElementFromWhichFunctionIsCalled(); // Possible?
        (myContainer.id == 'my-container'); // TRUE
    }
</script>

<div id="my-container">
    <script type="text/javascript">myFunction();</script>
</div>

函数myFunction(){
var myContainer=GetElementWhichFunction被调用();//可能吗?
(myContainer.id==“我的容器”);//TRUE
}
myFunction();

谢谢。

按照您在这里的称呼,当运行
myFunction
时,文档将只解析到
#my container
中的
script
元素。因此,您可以使用

var scripts = document.getElementsByTagName('script');
var currentScript = scripts[scripts.length - 1];
var myContainer = currentScript.parentNode;

获取元素。

我终于想出了这个解决方案:

希望它能帮助别人

/**
 * Creating a temporary element to fetch it's parent element.
 */
function getElementFromWhichFunctionIsCalled() {

    // Generating unique ID for temporary element.
    var trickElementId = 'trick-element-' + Math.floor(Math.random() * 100000);

    // Adding temporary element to the DOM.
    document.write('<div id="' + trickElementId + '"></div>');

    // Getting hold of added element.
    var trickElement = document.getElementById(trickElementId);

    // Getting parent element of our trick element.
    var foundElement = trickElement.parentNode;

    // Cleaning up (removing trick element from the DOM).
    foundElement.removeChild(trickElement);

    return foundElement;
}
/**
*创建临时元素以获取其父元素。
*/
调用函数的函数GetElement(){
//正在为临时元素生成唯一ID。
var trickElementId='trick element-'+Math.floor(Math.random()*100000);
//向DOM中添加临时元素。
文件。写(“”);
//获取添加的元素。
var trickElement=document.getElementById(trickElementId);
//获取技巧元素的父元素。
var foundElement=trickElement.parentNode;
//清理(从DOM中删除技巧元素)。
foundElement.removeChild(trickElement);
返回元素;
}

可能值得一看:但最简单的解决方案是只使用
myFunction(this)
,它将显式地传入DOM
object@MarcB嗯
将是全局上下文(
窗口
),而不是
DOM节点。或者,由于您有DIV ID,因此可以调用myFunction('my-container')。在函数中,您可以使用刚才传入的名称。@durbnpoisin,这对我来说太硬了)哇!聪明的把戏!)它与所有渲染引擎一致吗?它是向前兼容的吗?你的想法看起来很合理。然而,这个把戏对我不起作用。它得到了错误的脚本元素。当第三方服务(如Google Analytics等)动态生成其他脚本元素时,可能会变得复杂。