例如
<script>
function foo(){...}
</script>
<div><script>foo();</script></div>
<span><script>foo();</script></span>
我想从div调用foo返回“abc”,从span调用时返回“123”。
这可能吗?
答案 0 :(得分:3)
您可以在DOM中获取当前的最后一个元素。
内联<script>
块中的代码在浏览器解析页面时执行。因此,
最后一个DOM元素就在脚本之前。
答案 1 :(得分:2)
在阅读你的评论后,我认为你应该做点别的事情:
#ad1_empty
,#ad2_empty
,...)#ad1_full
,#ad2_full
,...)// code
<div id="ad_empty"><!-- placeholder --></div>
<div id="ad_content" style="display: none;">
<script src="[ad resource]"></script>
<script>inline ad script</script>
</div>
<script>
function replace( oldel, newel, show ) {
if ( typeof newel == "string" )
newel = document.getElementById( newel );
if ( typeof oldel == "string" )
oldel = document.getElementById( oldel );
if ( newel && oldel )
oldel.parentNode.replaceChild( newel, oldel );
if ( show )
newel.style.display = "";
}
window.onload = function() {
replace( "ad_empty", "ad_content", true );
replace( "ad_empty2", "ad_content2", true );
};
</script>
可以做你原本想要的事,顺便说一下(但是没用)
function foo() {
var scripts = document.getElementsByTagName("script");
var parent = scripts[scripts.length-1].parentNode;
var tag = parent.nodeName.toUpperCase();
if (tag == "DIV") {
alert("called from a <div>");
} else if (tag == "SPAN") {
alert("called from a <span>");
}
}
答案 2 :(得分:0)
不,这是不可能的。您必须手动传递某种参数以识别它的调用位置。
答案 3 :(得分:0)
没有办法做到这一点,可以用许多不同的方式调用脚本,只是不需要以任何方式将它放在规范中。
我认为总体上有一个很多更简单的方法来做你想要完成的事情,将<script>
嵌入到单个元素中并将任何内容置于<script>
元素的位置之外“看起来不像是一种合理的方式。”
那么......你最终要在这里完成什么?