Javascript 如何检查表格中的新内容,然后更新浏览器选项卡标题?

Javascript 如何检查表格中的新内容,然后更新浏览器选项卡标题?,javascript,jquery,html,Javascript,Jquery,Html,我正在研究一种方法,当新消息出现在表中时,刷新浏览器选项卡。我有标签部分的闪烁功能,我唯一的问题是,当收到消息时,我似乎无法让它闪烁(这是我练习的重点:) newMessage()函数工作正常,我似乎无法让notification()函数工作 我的代码如下: function newMessage() { var oldTitle = "Your Page"; var msg = "New Message"; var timeout = setI

我正在研究一种方法,当新消息出现在表中时,刷新浏览器选项卡。我有标签部分的闪烁功能,我唯一的问题是,当收到消息时,我似乎无法让它闪烁(这是我练习的重点:)

newMessage()
函数工作正常,我似乎无法让
notification()
函数工作

我的代码如下:

function newMessage() 
     {
      var oldTitle = "Your Page";
      var msg = "New Message";

      var timeout = setInterval(function() 
      { 
        document.title = document.title == msg ? '' : msg;
      }, 1000);

      window.onmousemove = function() {
          clearInterval(timeout);
          document.title = oldTitle;
          window.onmousemove = null;
      };
     }

function notification()
     {
       var index = 2;

       var content = document.getElementById('refreshMessages').childNodes[index];

        var content = document.getElementById('refreshMessages').getElementByTagName("tr")[1];

        var knownContent = content.toString();

        updater.start();

        updater2.start();

        var newContent = document.getElementById('refreshMessages').childNodes[index];

        var newContent = document.getElementById('refreshMessages').getElementByTagName("tr")[1];

        if(knownContent != newContent.toString())
        {
           newMessage();
           knownContent = newContent;
        }
        else if(knownContent = newContent.toString())
          {
            alert("No need to flash title.");
          }
     }
     notification();
notification()
函数中,我试图通过比较表中相应单元格的字符串来调用
newMessage()
函数

我将
alert()
放入else if,只是想看看是否会调用它,但它没有发生<但是,代码>更新.start()和
更新2.start()
是执行的,因为我可以看到表中显示的消息

我会更乐意使用JavaScript,但我也对jQuery持开放态度

我的JavaScript非常生锈,如果我犯了任何愚蠢的错误,请原谅

谢谢


Chuck

函数通知()中有几个错误,请参见我的注释:

function notification()
{
    var index = 2;

    //Why are you assigning value to "content" for twice?
    var content = document.getElementById('refreshMessages').childNodes[index];
    /*
    * function getElementByTagName is undefined, should be getElementsByTagName, 
    *  's' is missing. And [1] means the second one not the first one, make sure
    *  that's exactly what you want.
    */
    var content = document.getElementById('refreshMessages').getElementByTagName("tr")[1];

    /*
    * content is a tr dom object, content.toString() is something like "[object]".
    * If you want to get content inside a cell, you should use cell.innerHTML.
    * e.g. A table: 
    * <table id="refreshMessages">
    *     <tr><td>Hello world</td></tr>
    * </table>
    * var table = document.getElementById('refreshMessages');
    * var firstTr = table.getElementsByTagName("tr")[0];
    * var firstTd = firstTr.getElementsByTagName("td")[0];
    * alert(firstTd.innerHTML);      //alerts "Hello world"
    */
    var knownContent = content.toString();

    //I doubt these functions really get invoked cuz there's javascript error above.
    updater.start();

    updater2.start();

    //assigning twice, "getElementByTagName" is missing "s"
    var newContent = document.getElementById('refreshMessages').childNodes[index];
    var newContent = document.getElementById('refreshMessages').getElementByTagName("tr")[1];

    //Remove toString(), use innerHTML i metioned above.
    if(knownContent != newContent.toString())
    {
       newMessage();
       knownContent = newContent;
    }
    //You miss an "=" here, to judge a equals b, you should use "=="
    else if(knownContent = newContent.toString())
    {
        alert("No need to flash title.");
    }
}
函数通知()
{
var指数=2;
//为什么要给“内容”赋值两次?
var content=document.getElementById('refreshMessages').childNodes[index];
/*
*函数getElementByTagName未定义,应为getElementsByTagName,
*缺少“s”。并且[1]表示第二个,而不是第一个,请确保
*那正是你想要的。
*/
var content=document.getElementById('refreshMessages').getElementByTagName(“tr”)[1];
/*
*content是一个tr-dom对象,content.toString()类似于“[object]”。
*如果要获取单元格内的内容,应使用cell.innerHTML。
*例如,一张桌子:
* 
*你好,世界
* 
*var table=document.getElementById('refreshMessages');
*var firstTr=table.getElementsByTagName(“tr”)[0];
*var firstTd=firstTr.getElementsByTagName(“td”)[0];
*警报(firstTd.innerHTML);//警报“Hello world”
*/
var knownContent=content.toString();
//我怀疑这些函数是否真的被调用,因为上面有javascript错误。
updater.start();
updater2.start();
//分配两次,“getElementByTagName”缺少“s”
var newContent=document.getElementById('refreshMessages').childNodes[index];
var newContent=document.getElementById('refreshMessages').getElementByTagName(“tr”)[1];
//删除toString(),使用上面提到的innerHTML。
if(knownContent!=newContent.toString())
{
newMessage();
knownContent=新内容;
}
//你在这里漏掉了一个“=”,要判断a等于b,你应该使用“=”
else if(knownContent=newContent.toString())
{
警告(“无需刷新标题”);
}
}

如果没有看到html,我无法判断问题出在哪里,但是您正在对一个有点奇怪的html元素调用
.toString()
,您有一个
newContent
content
的双重声明,这意味着第一个基本上被忽略了。。。这里应该发生什么?猜测代码应该可以工作(即使有ckozl指出的奇怪之处),并且您的代码在头部部分。问题是,代码是在DOM树准备就绪和所有
文档之前执行的。getElementById
返回
null
,尝试在null上调用方法会引发错误。尝试更改您的呼叫
通知()
to
window.onload=function(){notification();}。我相信现代浏览器在选项卡未聚焦时会排队/暂停设置间隔@Prusse啊谢谢你,今天早上我花了一个半小时试图弄明白为什么FireBug告诉我该表为空,我一定是删除了
窗口。onload
在这条线上的某个地方!谢谢非常感谢您的帮助,并为我的愚蠢错误道歉,正如我所说,JavaScript不是我通常的领域@不客气。你不必为此道歉。每个人都会犯错误