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上调用方法会引发错误。尝试更改您的呼叫通知()
towindow.onload=function(){notification();}代码>。我相信现代浏览器在选项卡未聚焦时会排队/暂停设置间隔@Prusse啊谢谢你,今天早上我花了一个半小时试图弄明白为什么FireBug告诉我该表为空,我一定是删除了窗口。onload
在这条线上的某个地方!谢谢非常感谢您的帮助,并为我的愚蠢错误道歉,正如我所说,JavaScript不是我通常的领域@不客气。你不必为此道歉。每个人都会犯错误