gpt4 book ai didi

php - 创建元素和 insertBefore 不起作用

转载 作者:行者123 更新时间:2023-11-29 22:41:17 24 4
gpt4 key购买 nike

好吧,我一直在用头撞墙,但我不知道为什么它没有创建元素。也许是我在这里忽略的非常小的东西。基本上,在输出的 PHP 文档中有这段 Javascript 代码,就像在加载页面的中间某处,现在,不幸的是它不能进入​​标题。虽然我不确定这是否是问题所在,但也许是……嗯嗯。

// Setting the variables needed to be set.
echo '
<script type="text/javascript" src="' . $settings['default_theme_url'] . '/scripts/shoutbox.js"></script>';
echo '
<script type="text/javascript">
var refreshRate = ', $params['refresh_rate'], ';
createEventListener(window);
window.addEventListener("load", loadShouts, false);

function loadShouts()
{
var alldivs = document.getElementsByTagName(\'div\');
var shoutCount = 0;
var divName = "undefined";

for (var i = 0; i<alldivs.length; i++)
{
var is_counted = 0;
divName = alldivs[i].getAttribute(\'name\');

if (divName.indexOf(\'dp_Reserved_Shoutbox\') < 0 && divName.indexOf(\'dp_Reserved_Counted\') < 0)
continue;
else if(divName == "undefined")
continue;
else
{
if (divName.indexOf(\'dp_Reserved_Counted\') == 0)
{
is_counted = 0;
shoutCount++;
continue;
}
else
{
shoutCount++;
is_counted = 1;
}
}

// Empty out the name attr.
alldivs[i].name = \'dp_Reserved_Counted\';

var shoutId = \'shoutbox_area\' + shoutCount;

// Build the div to be inserted.
var shoutHolder = document.createElement(\'div\');
shoutHolder.setAttribute(\'id\', [shoutId]);
shoutHolder.setAttribute(\'class\', \'dp_control_flow\');
shoutHolder.style.cssText = \'padding-right: 6px;\';
alldivs[i].parentNode.insertBefore(shoutHolder, alldivs[i]);

if (is_counted == 1)
{
startShouts(refreshRate, shoutId);
break;
}
}
}

</script>';

此外,我确信我在这些函数中链接到的其他函数工作正常。这里的问题是,在这个函数中,div 根本不会被创建,我不明白为什么?此外 Firefox,FireBug 告诉我变量 divName 是未定义的,即使我试图在函数中解决这个问题,但不确定为什么。

无论如何,我需要将创建的 div 元素插入到以下 HTML 之前:

echo '
<div name="dp_Reserved_Shoutbox" style="padding-bottom: 9px;"></div>';

我在这里使用 name 而不是 id,因为我不想要重复的 id 值,这就是我更改 name 值并递增的原因,因为这个函数可能被调用超过 1 次。例如,如果同一页面上有 3 个 shoutboxes(不要问为什么......大声笑),我需要跳过我已经更改为“dp_Reserved_Counted”的其他名称,我相信我做对了。在任何情况下,如果可以的话,我会把它放在标题中并只调用一次,但这是不可能的,因为它们已加载并且无法分辨它们是哪个,所以它直接硬编码到实际中在 HTML 中 shoutbox 所在的页面上输出。基本上,不确定这是否是问题所在,但必须有某种解决方法,除非问题出在我上面的代码中...... arrg

请帮帮我。我真正需要的是对此进行第二组观察。谢谢:)

最佳答案

当你测试 divName 时,从这里切换你的条件顺序

                divName = alldivs[i].getAttribute(\'name\');

if (divName.indexOf(\'dp_Reserved_Shoutbox\') < 0 && divName.indexOf(\'dp_Reserved_Counted\') < 0)
continue;
else if(divName == "undefined")
continue;

为此:

                var divName = alldivs[i].getAttribute(\'name\');
if (!divName) // this is sufficient, by the way
continue;
else if (divName.indexOf(\'dp_Reserved_Shoutbox\') < 0 && divName.indexOf(\'dp_Reserved_Counted\') < 0)
continue;

问题在于,当脚本找到没有名称的 div 时,它会尝试调用不存在值的 indexOf 属性,因此会引发错误。

关于php - 创建元素和 insertBefore 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2687327/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com