2011-07-07 38 views
0

我正在使用jQuery来允许我的用户快速浏览他们的配置文件。他们的个人资料上有一个收件箱,我让他们使用jQuery删除过去的邮件。问题是,每次加载页面时都会有不同数量的电子邮件。我怎么能告诉jQuery管理邮件1和邮件2和邮件3等功能,但只有它们存在。jQuery能运行一个循环吗?

下面你会看到我正在运行的每个jquery,但是需要有一些循环。

$(document).ready(function() { 
    $("#del1").click(function() { 
    $(".mail1").fadeOut(); 
    }); 
}); 

$(document).ready(function() { 
    $("#del2").click(function() { 
    $(".mail2").fadeOut(); 
    }); 
}); 
+2

林不知道你是什么意思的'循环'我什么都看不到循环。 – Neal

+0

如果你正在交互的元素不存在,jQuery通常会自动失败,所以通常不需要先检查。我也认为你需要澄清你的问题,循环在哪里进行呢? –

+0

看起来@Michael想要遍历所有的del元素并将一个click事件绑定到它们,实际上他应该做的是将一个单击事件绑定到所有相关元素,然后决定隐藏什么在被点击的元素的ID上。 – Acorn

回答

4

你应该让你的元素和代码更通用。例如,给所有删除链接同一个班级,可以说deleteButton和所有邮件同一班级,说mail

然后用他们的邻近处理它们。也许是这样的:

$(".deleteButton").click(function(){ 
    $(this).parent().find(".mail").fadeOut(); 
}); 

这假定按钮和邮件共享共同的父,但即使他们不这样做,类似的事情可以做。

+0

我是用这个做的 – Michael

+0

@kingjiv我不认为“this”应该放在引号中吗? – kasdega

+0

@ kasdegar nope,它不应该。 –

-1
$(document).ready(function() { 
    if($("#del1").length){ 
     $("#del1").click(function() { 
     $(".mail1").fadeOut(); 
     }); 
    } 
    if($("#del2").length){ 
     $("#del2").click(function() { 
     $(".mail2").fadeOut(); 
     }); 
    } 
    .... 
}); 
+0

只是如果($(“*”)){和...会做到这一点? – Michael

+0

@Michael,你需要'.length' – Neal

+0

我不认为有'#del'元素的数量是固定的。我认为他说他们是动态创建的,他不知道他有多少。 –

4

给每个删除按钮,一个共同的类和data-id属性。您可以将click事件绑定到每个del按钮,然后删除相应的邮件元素。

$(".del").click(function() { 
    var id = $(this).attr("data-id"); 
    $(".mail" + id).fadeOut(); 
}); 
+2

与$(“。mail”)相同。fadeOut()'为什么循环?另外,他只想隐藏与点击删除按钮相关的邮件项目。 –

+0

我不认为这应该是一个downvote。除非没有很好的描述性解释,否则这是非常正确的。 – Perception

+0

我认为描述的循环是他认为他应该循环并在循环中有'#del1','#del2'等,直到其中一个不存在。只是一个坏主意。 –

0
  1. 绑定一个click事件给所有的德尔 元素。

  2. 当它们被点击时,获取ID 并使用它获取要隐藏的相关类的名称 。

  3. 使用类名做 ​​

0

我觉得这样的事情应该工作:

$(document).ready(function() { 
    $("[id^=del]").each(function(){ 
    var e=$(this),m = e.attr('id').match(/^del(\d+)$/); 
    if(m){ 
     e.click(function(){$('#.mail'+m[1]).fadeOut();}); 
    } 
    }); 
}); 
1

我想尝试这样的事:

$("[id^='del']").each(function(){ 
$(this).click(function(){ 
    $('.mail'+(/\d+/).exec($(this).attr("id"))).fadeOut(); 
}); 
}); 
-1

jQuery的可以让你与“startswith”你也可以使用jQuery的正则表达式选择器选择但我认为这让你关闭:

$(document).ready(function() { 
    $('*[id^="del"]').click(function() { 
    $(this).closest('[class^="mail"]').fadeOut(); 
    }); 
}); 

这假定class =“mail ...”是一个祖先在某些点的ID =“删除...”

因为我们不知道你的确切的HTML我喜欢最接近而不是父母,因为父母假设del是直接在邮件里面的一层。

+2

据我所知,当单击任何'del'元素时,这将隐藏所有'mail'元素。 OP想要隐藏相应的'mail'元素。 – Acorn

+0

是的你是对的。编辑/更正为将fadeOut置于上下文中 – kasdega

+0

'this'在该上下文中是删除按钮,邮件不包含在删除按钮内,因此查找不会找到任何内容。 –