在同一个div中获得兄弟姐妹的价值

时间:2014-08-15 11:29:50

标签: javascript jquery

我想为每个具有给定类的项目执行某种逻辑(代码重用,这就是为什么我不使用id):项目在同一个div中无处不在:

<div id="mDiv>
<input type="text" class = "class1>
<input type="hidden"/>
</div>

并且脚本是这样的:

    $(".class1").val(calcDefaultDate())

    function calcDefaultDate(){
        var currDate = $(this).siblings('input[type=hidden]').val();
        if (currDate == "") {
            return new Date();
        }
        return currDate;
    }

问题是这样的$(this)是Window而不是class1的元素,我对javascript很新,所以它可能很简单但是应该如何处理呢?

谢谢!

4 个答案:

答案 0 :(得分:2)

你非常接近,你只需要传递像

这样的功能参考
$(".class1").val(calcDefaultDate); //Notice removed ()

使用()时,正在调用函数。

DEMO

答案 1 :(得分:1)

您可以尝试将元素作为参数,而不是尝试使用this关键字来覆盖它:

$(".class1").val(calcDefaultDate($(".class1")))

function calcDefaultDate($element){
    var currDate = element.siblings('input[type=hidden]').val();
    if (currDate == "") {
        return new Date();
    }
    return currDate;
}

顺便说一句,也许你更喜欢return new Date(+currDate);而不是return currDate;,这样你的函数返回的类型更加一致。

答案 2 :(得分:1)

实施中需要做一些改变。

像贝洛一样

$(".class1").each(function(){
    var currDate = $(this).siblings('input[type=hidden]').val();
    if (currDate == "") {
        $(this).val(new Date());
    }
 else
    $(this).val(currDate);
});

DEMO

答案 3 :(得分:1)

尝试将div作为参数传递给函数:

$(".class1").each(function() {
    $(this).val(calcDefaultDate($(this)));
});

function calcDefaultDate(el) {
    var currDate = $(el).siblings('input[type=hidden]').val();
    if (currDate == "") {
        return new Date();
    }
    return currDate;
}

或者将函数应用于每个元素:

$(".class1").each(function() {
    updateDefaultDate($(this));
});

function updateDefaultDate(el) {
    var currDate = $(el).siblings('input[type=hidden]').val();
    if (currDate == "") {
        currDate = new Date();
    }
    el.val(currDate);
}

或者将所有元素传递给您的函数:

updateDefaultDate($(".class1"));

function updateDefaultDate(elements) {
    $(elements).each(function() {
        var currDate = $(this).siblings('input[type=hidden]').val();
        if (currDate == "") {
            currDate = new Date();
        }
        $(this).val(currDate);
    });
}