-2

我有这个脚本,我正在尝试创建第三个值 (m3),但我不知道如何处理该obj.nodeValue=(obj.nodeValue==m1)?m2:m1;行。另外,我将如何将 html 放入 m1、m2 和 m3 中?特别是粗体标签。谢谢

<script type="text/javascript">
function adMessage() {

   delay=10000;

   m1='Place your Thanksgiving orders today!';
   m2='All orders must be received by November 20th!';
   m3='testing';
   obj=document.getElementById('orders').firstChild;

   obj.nodeValue=(obj.nodeValue==m1)?m2:m1;

   setTimeout(function(){adMessage()},delay);
 }
if(window.addEventListener){
   window.addEventListener('load',adMessage,false);
 }
else { 
if(window.attachEvent){
   window.attachEvent('onload',adMessage);
  }
 }
</script>


<p id="orders">Place your Thanksgiving orders today!</p>
4

2 回答 2

1

由于您不再有二进制大小写,因此您无法比较当前值并根据要显示的消息来决定(好吧,好吧,您可以,但它会变得丑陋)。

一个干净的方法是创建一个消息列表,跟踪当前消息的索引并推进索引(带有环绕)。

例子:

var index = 0;
var messages = [
    'Place your Thanksgiving orders today!',
    'All orders must be received by November 20th!',
    'testing'
];
var delay = 10000;

function adMessage() {
   var node = document.getElementById('orders').firstChild;

   node.nodeValue = messages[index];
    // advance index and wrap around if necessary
   index = (index + 1) % messages.length;

   setTimeout(adMessage, delay);
}

通过正确放置代码,您不需要监听load事件,并且可以避免一遍又一遍地搜索函数内部的 DOM 节点。

于 2013-02-09T13:59:21.447 回答
0

线

obj.nodeValue=(obj.nodeValue==m1)?m2:m1;

是这个的简短版本

if (obj.nodeValue == m1) 
{
    obj.nodeValue = m2;
} 
else 
{
  obj.nodeValue = m1;
}

根据您的逻辑来显示您需要扩展此决定的 m3 值。

如果您想在每个间隔切换到下一条消息,那么也许这就是您的解决方案:

if (obj.nodeValue == m1) 
{
    obj.nodeValue = m2;
} 
else if (obj.nodeValue == m2) 
{
  obj.nodeValue = m3;
}
else 
{
   obj.nodeValue = m1;
}

而菲利克斯的想法当然更好。如果你把你的消息放在一个数组中,你可以很容易地扩展它。

对于您关于嵌入 HTML 标记的部分问题:您需要设置元素的 innerHTML 值而不是 nodeValue。

我提出了一个正在运行的 jsfiddle,包含您问题的各个方面:http: //jsfiddle.net/eNape/1/

于 2013-02-09T13:58:15.183 回答