在jquery中动态创建一个选择器并使用'this'

时间:2013-05-01 15:42:46

标签: javascript jquery css jquery-selectors css-selectors

希望我能正确解释这一点。

我正在尝试不重复代码并且有一个循环将悬停函数绑定到显示大约30个模型的菜单中的特定模型。我想能够轻松添加更多模型,所以我做了一个循环。

var models = ["#model1", "#model2", "#model3", "#model4", "#model5"];

for(var index = 0; index < models.length; ++index) {
   $(models[index]).hover(fadeInAndBlock, fadeOutAndUnblock);
}

现在这很好用。这是fadeInAndBlock无法正常工作。我试图点亮一些按钮,然后阻止页面的其余部分。

function fadeInAndBlock() {
$(".productmenuinfo").block({
    overlayCSS: {
        backgroundColor: "#fff",
        opacity: 0.6,
        cursor: "default"
    },
    message: null
});
$(this).unblock( { fadeOut: 0});


$(this + " .btnproductmoreinfo").css({
    backgroundPosition: "0px 24px"
});
$(this + " .btnproductconfigure").css({
    backgroundPosition: "0px 24px"
});
}

基本上,我不能让'this'在选择器中工作。我需要它,因为选择器应该只是模型按钮。谢谢你的帮助!

2 个答案:

答案 0 :(得分:3)

执行this + " .btnproductconfigure"后,this.toString() + " .btnproductconfigure"就会产生[object Object] .btnproductconfigure

因此,您需要使用已有的对象并使用find()来获取您所追求的元素。

所以行

$(this + " .btnproductconfigure").css({

应该是

$(this).find(".btnproductconfigure").css({

此外,您真的不需要维护ID列表。在所有元素上使用公共类,您不必遍历并维护列表。

答案 1 :(得分:2)

您可以将其作为context in selector传递给后代查找。

语法 jQuery( selector [, context ] )

$(".btnproductmoreinfo", this ).css({
    backgroundPosition: "0px 24px"
});