2012-03-21 95 views
1

我有一个按钮可以创建一个新的引脚。该针在一个div中。它还创建了一个隐藏输入来记录该引脚被拖动时的位置。在我创建的jquery代码中,我使用.data("my_id",pinNumber)来标记引脚和输入的div。 PinNumber在创建新引脚时递增。这意味着带有新引脚的div和输入都有一个名为my_id的数据键,其值相同。Jquery .data(),如何检索具有匹配值的元素?

当一个使用点击删除一个引脚上,我希望它删除与该div相关的div和输入。这是我的删除代码。

$(".close").live("click", function() { 
    var this_id = $(this).parent("div").data("my_id"); 
$('div[data:my_id='+this_id+']').remove(); 

var this_id返回正确的引脚ID。不过,我遇到了如何根据数据值而不是数据键选择元素的问题。

我该怎么做?如何选择所有元素或所有div或所有输入,无论哪里,数据值=指定值?我在说Jquery .data()不是HTML数据标签。

PS我使用的是live(),因为这些引脚是在使用命中新引脚时创建的,因此当代码首次上线时,DOM元素不存在。一个用途可以创建30个引脚。我需要一种方法,并且我认为data()方法最适合将针脚div与创建的输入连接。此外,.draggable()然后会报告具有相同数据值的输入的用户界面位置....需要帮助。

回答

2

您可以使用filter()并检查谓词的数据值指定:

$("div, input").filter(function() { 
    return $(this).data("my_id") == this_id; 
}).remove(); 
+0

请记住使用三等于运算符=== – 2012-03-21 19:56:20

+0

@Greg,是否有一个原因,你在这种情况下被迫使用严格的相等运算符? – 2012-03-21 20:20:15

+0

因为你不知道this_id是什么类型。最有可能的是,这里不会遇到任何类型的强制错误,但最好使用严格的相等运算符来确保所比较的两个值是相同的类型。唯一不适用的情况是当你试图确定一个值是否为空或未定义。 something == null很好地诀窍 – 2012-03-21 20:24:44

0
var this_id = $(this).parent("div").data("my_id"); 
$('div').each(function() { 
    var this = $(this); 
    if(this.data("my_id") = this_id) { 
     this.remove(); 
    } 
}); 

这可能会实现,虽然是一个坏榜样。我认为这些都是糟糕的表现。

+1

与格雷格弗兰科关于等式运算符的讨论,使我意识到你在条件表达式中使用赋值运算符'='而不是其中一个相等运算符'=='或'==='。最终的结果可能不会是你想要的。 – 2012-03-21 20:43:06

+0

的确,我的意思==实际上,我也不会去=== – RTulley 2012-03-21 21:15:26

相关问题