-2

私はこのスクリプトを持っていて、3 番目の値 (m3) を作成しようとしていますが、そのobj.nodeValue=(obj.nodeValue==m1)?m2:m1;行をどうすればよいかわかりません。また、m1、m2、m3 に html を配置するにはどうすればよいですか? 特に太字のタグ。ありがとう

<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タグの埋め込みに関する質問の一部として、nodeValueではなく要素のinnerHTML値を設定する必要があります。

私はあなたの質問のすべての側面で実行中のjsfiddleを置きました:http://jsfiddle.net/eNape/1/

于 2013-02-09T13:58:15.183 に答える