Class 应该是 shown/hidden,这取决于它的内容 - 但它只会被隐藏

Class should be shown/hidden, depending on its content - but it only gets hidden

我正在处理 PHP-聊天。 当用户登录时,他会自动发送一条消息 "logged in" 显示给所有人,当他注销时,他会自动发送 "logged out" 显示给所有人(当然除了他)。 当所有用户注销时,所有消息都会自动删除。

我现在正在开发一个功能,可以告诉您聊天室中是否只有您一个人。 我想使用 JavaScript 来解决这个问题。我现在使用的脚本统计"logged in"和"logged out"这个词在聊天记录中出现的频率(是的,不是最终的解决方案,但绝对足够我使用)

代码如下:

function countverlassen(){
    var temp = document.body.innerText;

// the g in the regular expression says to search the whole string 
// rather than just find the first occurrence
var countverlassen = (temp.match(/verlassen/g) || []).length +1;

console.log(countverlassen);
}

function countbetreten(){
    var temp = document.body.innerText;

// the g in the regular expression says to search the whole string 
// rather than just find the first occurrence
var countbetreten = (temp.match(/betreten/g) || []).length;

console.log(countbetreten);
       if (countbetreten >= 2 && countbetreten != countverlassen){
           $('.alleine').hide();
       }
else if (countverlassen >= 2 && countbetreten == countverlassen) {
           $('.alleine').show();
       }
}

class "alleine" 仅包含文本 "You are alone in here right now"。 当另一个用户登录时,这应该被隐藏,当除您之外的所有其他用户注销时,它应该再次显示。 隐藏 class 效果很好,但当其他人都注销时它不会再次出现。

您可以在此处查看实际效果:http://team3.digital-cultures.net/index.php# 只需选择一个名称并从下拉列表中选择一个起点/目的地。

我做错了什么? 谢谢!

编辑:出于测试目的,您只需在聊天中输入 "betreten"(德语为 "logged in")和 "verlassen"("logged out in German"),无需登录有多个帐户:)

你需要使用return来得到一个值。使用函数名只是创建一个新的局部变量。我已经重命名了 var 以使其更清晰。

function countverlassen(){
    var temp = document.body.innerText;

    // the g in the regular expression says to search the whole string 
    // rather than just find the first occurrence
    var verlassenCount = (temp.match(/verlassen/g) || []).length +1;

    console.log(verlassenCount);
    return verlassenCount;
}

使用countverlassen()调用函数并获取值。存储值而不是每次都调用函数。

function countbetreten() {
    var temp = document.body.innerText;

    // the g in the regular expression says to search the whole string 
    // rather than just find the first occurrence
    var betretenCounter = (temp.match(/betreten/g) || []).length;
    var verlassenCounter = countverlassen();

    console.log(betretenCounter);
    if (betretenCounter >= 2 && betretenCounter != verlassenCounter) {
        $('.alleine').hide();
    } else if (verlassenCounter >= 2 && betretenCounter == verlassenCounter) {
        $('.alleine').show();
    }
}