我正在动态创建元素(级别1),这反过来又创建了元素(级别2)。但是,2级元素的孩子有“身体”作为他们的父母。
在下面的HTML代码中,如果spotAd2是由我的函数createNode()创建的。这是Google Ad Sense广告代码。但是,Google Ad Sense标记会创建直接位于“正文”下的元素。我需要他们在tnDiv1下。
function createNode( t, // type.
tn, // if type is element, tag name.
a, // if type is element, attributes.
v, // node value or text content
p, // parent
f ) // whether to make dist the first child or not.
{
n = null;
switch( t )
{
case "element":
n = document.createElement( tn );
if( a )
{
for( k in a )
{
n.setAttribute( k, a[ k ] );
}
}
break;
case "text":
case "cdata_section":
case "comment":
n = document.createTextNode(v);
break;
}
if ( p )
{
if( f )
{
p.insertBefore( n, p.firstChild );
}
else
{
p.appendChild( n );
}
}
return n;
}
spotAd2 = document.getElementById("spotAd2");
n1 = createNode("element", "div", {"id":"tnDiv1"}, "\n" , spotAd2, true);
n2 = createNode("element", "script", {"type":"text\/javascript"}, "\n" , n1, false);
n3 = createNode("comment", "", null, "\n" +
"google_ad_client = \"pub-0321943928525350\";\n" +
"/* 728x90 (main top) */\n" +
"google_ad_slot = \"2783893649\";\n" +
"google_ad_width = 728;\n" +
"google_ad_height = 90;\n" +
"//\n" , n2, false);
n4 = createNode("element", "script", {"type":"text\/javascript","src":"http:\/\/pagead2.googlesyndication.com\/pagead\/show_ads.js"}, "\n" , n1, false);
---结果:
<body>
<table cellspacing="2" cellpadding="2" border="1">
<tbody><tr>
<td>Oel ngati kemeie</td>
<td>Kamakto niwin</td>
</tr>
<tr>
<td>The ad:</td>
<td>
<div id="spotAd2">
<!-- Created by createNode() -->
<div id="tnDiv1">
<script type="text/javascript">
google_ad_client = "pub-0321943928525350";
/* 728x90 (main top) */
google_ad_slot = "2783893649";
google_ad_width = 728;
google_ad_height = 90;
</script>
<script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
</div>
<!-- Created by createNode() -->
</div>
</td>
</tr>
<tr>
<td>txopu ra'a tsi, tsamsiyu</td>
<td>teyrakup skxawng</td>
</tr>
</tbody></table>
<!-- Created by adsense tag, need these to be under tnDiv1 -->
<script src="http://pagead2.googlesyndication.com/pagead/expansion_embed.js"></script>
<script src="http://googleads.g.doubleclick.net/pagead/test_domain.js"></script>
<script>google_protectAndRun("ads_core.google_render_ad", google_handleError, google_render_ad);</script>
<ins style="border: medium none ; margin: 0pt; padding: 0pt; display: inline-table; height: 90px; position: relative; visibility: visible; width: 728px;">
<ins style="border: medium none ; margin: 0pt; padding: 0pt; display: block; height: 90px; position: relative; visibility: visible; width: 728px;">
<iframe width="728" scrolling="no" height="90" frameborder="0" vspace="0" style="left: 0pt; position: absolute; top: 0pt;" src="http://googleads.g.doubleclick.net/pagead/ads?client=ca-pub-0321943928525350&output=html&h=90&slotname=2783893649&w=728&lmt=1273708979&flash=10.0.45&url=http%3A%2F%2Fkenshin.katanatechworks.com%2Ftest%2FadsBrowserSide.php&dt=1273708980294&shv=r20100422&correlator=1273708980298&frm=0&ga_vid=695691836.1273708981&ga_sid=1273708981&ga_hid=1961182006&ga_fc=0&u_tz=480&u_his=2&u_java=1&u_h=1080&u_w=1920&u_ah=1052&u_aw=1920&u_cd=24&u_nplug=5&u_nmime=38&biw=1394&bih=324&fu=0&ifi=1&dtd=955&xpc=Jl67G4xiq6&p=http%3A//kenshin.katanatechworks.com" name="google_ads_frame" marginwidth="0" marginheight="0" id="google_ads_frame1" hspace="0" allowtransparency="true">
</iframe>
</ins>
</ins>
<!-- Created by adsense tag, need these to be under tnDiv1 -->
</body>
答案 0 :(得分:0)
好的,经过急需的睡眠(已经醒了将近24小时),我的头脑清醒了,并且能够更好地分析问题(我的同事提供了一些有用的信息)。
我意识到罪魁祸首是document.write(),应该问过这样的事情:
JavaScript - controlling the insertion point for document.write
这引出了我很多解决方案。
然后我想出了这个原型:
document.write = function(str)
{
div = document.createElementNS("http://www.w3.org/1999/xhtml","div");
div.innerHTML = str;
var nodes = div.childNodes;
while ( nodes.length )
{
document.getElementById("spotAd2").appendChild( nodes[0] );
}
};
瞧! AdSense广告出现在我希望的位置。
通过一些改进,我可以将其转变为通用解决方案。