如果声明,jQuery hasClass不工作或有缺陷

时间:2015-10-25 20:09:38

标签: javascript jquery html css

我在战舰游戏上工作。当前的genShips函数应该检查是否已经标记了coorinate x:y及其surroindings的div。如果它们被标记,则尝试使用新的x和y,如果它们没有标记,也就是说没有附近的船只,则将船放在x:y,x + 1:y上。船只总是1x2和水平。角落可以触摸,但两侧都不能接触。

http://jsfiddle.net/u43703ms/1/

上的完整代码

只是功能本身。

function genShips() {
var gridLength = $("#option").val();
while (true) {
    var y = Math.floor(((Math.random() * gridLength)));
    var x = Math.floor(((Math.random() * gridLength)));
    var x2 = x + 1;
    $("#info").html(x + ":" + y);

    if 
    (
    $("#grid .cell[data-x="+x+"][data-y="+y+"]").hasClass("ship")
    || ($("#grid .cell[data-x="+x+"][data-y="+(y-1)+"]").hasClass("ship"))
    || ($("#grid .cell[data-x="+x+"][data-y="+(y+1)+"]").hasClass("ship"))
    || ($("#grid .cell[data-x="+(x-1)+"][data-y="+y+"]").hasClass("ship"))
    || ($("#grid .cell[data-x="+(x+1)+"][data-y="+y+"]").hasClass("ship"))
    || ($("#grid .cell[data-x="+(x2-1)+"][data-y="+y+"]").hasClass("ship")) 
    || ($("#grid .cell[data-x="+x2+"][data-y="+(y+1)+"]").hasClass("ship"))
    || ($("#grid .cell[data-x="+x2+"][data-y="+(y-1)+"]").hasClass("ship"))
    || ($("#grid .cell[data-x="+(x2+1)+"][data-y="+y+"]").hasClass("ship"))
    ) 

    {
        console.log("dont print ship");
    }
    else {
        console.log("print ship");
        $("#grid .cell[data-x="+x+"][data-y="+y+"]").attr("class", "ship");
        $("#grid .cell[data-x="+x2+"][data-y="+y+"]").attr("class", "ship");
        break;
    }

}

}

Generate为您提供所需的网格化(从下拉菜单中选择),genShips尝试将船放在网格上。现在它只是因为某种原因没有在div上看到“ship”类,或者我的if语句有缺陷。

为了更好地解释我的if语句,它基本上可以控制是否在x,y,上,下,左,右,上和右上方为x2,即第二个框。

2 个答案:

答案 0 :(得分:2)

变化: -

.attr("class", "ship");

于: -

.addClass("ship");

在您的完整代码中

function klikk(x, y) {
    $(".cell").click(function() {
        $(this).attr("class", "ship");
    });
}

.attr("class", "ship");正在替换所有类(.cell),只留下.ship。所以永远不会找到.cell hasClass .ship

答案 1 :(得分:0)

我一直在盯着试图完成你想要实现的目标的代码。我认为它非常整洁/酷。 ; - )

我认为你想要&& 而不是 ||

没有进一步检查逻辑是否正确与&&但是||似乎没有凝聚我。

尝试使用 addClass removeClass 而不是 Attr(类," someclass"),因为后者删除了任何其他这也可能不是意图。