2010-06-18 24 views
0

我有一个非常复杂的聊天应用程序正在进行,并且有多个聊天窗格,聊天条目,聊天提交等在同一窗口中进行。起初,我打算做类似的东西....是否可以使用.data()作为搜索条件?

<input type="text" class="chattext" id="chattext-42"> 
<input type="text" class="chattext" id="chattext-93"> 
<input type="button" class="chatsubmit" id="chatsubmit-42"> 
<input type="button" class="chatsubmit" id="chatsubmit-93"> 

...等等(当然这是大大简化了,他们会在不同的div,独立能见度等),所以,当他们点击一个.chatsubmit,它会得到这个ID并找到聊天ID的最后两个字符。这提出了一些问题,因为如果ID改变了长度,它将需要重写,并且对我来说似乎仅仅是不雅观的。

我才想起jQuery中的。数据()便利...我想,也许我能做到这一点更是这样的:

<input type="text" class="chattext"> ... and add a .data("id", 42) to this one 
<input type="button" class="chatsubmit"> ... and add a .data("id", 42) 

所以,当他们点击chatsubmit,它得到的ID,并然后找到具有该ID的chattext并对其进行处理。但看看文档,我没有看到用这种方法搜索的简单方法。例如,假设在这种情况下,事件的目标是用42的数据(“ID”)的chatsubmit ...

var ID = $(event.target).data('id'); // Sets it to 42 
var chattext = ... 

在这里,我遇到了麻烦。如何找到哪个DOM元素与一个chattext类和一个42的数据('id')匹配?有没有简单的方法,或者我必须搜索每个.chattext的ID为42的那个?还是有另一种简单的方法呢?

我确实考虑过容器div具有ID的可能性,我认为这会使它成为ID?稍微容易得到。但是,如果这能起作用,它也可以处理其他集装箱业务中的事情,这不是一个长期的解决方案。

编辑:发布后几秒钟,我发现这个:http://james.padolsey.com/javascript/extending-jquerys-selector-capabilities/其中包括有关将选择器扩展为数据的信息。所以我会尝试一下,在此期间,这是一种完全蛮干的处理方式吗?

回答

1

我没有看到使用“ID”的任何错误,它肯定会成为找到事物的最快方法。如果你小心与模式使用(也就是说,始终将数字键后,“ - ”或“_”字符),那么你可以使用正则表达式来拆分键值:

var key = $(this).attr('className').replace(/-(\d+)$/, "$1"); 

或随你。

当然,您仍然可以使用“数据”功能来存储密钥,如果从“id”值中取出它看起来很难看。但是,它不会打扰我。

编辑 —如果你想“清理”,甚至更多,你总是可以写一对夫妇的jQuery插件,以使其能够拿到钥匙,并返回一个选择器,可以用来寻找“合作伙伴“给定的元素。

+0

出于某种原因,正则表达式很少出现在我身上。所以我想你已经说服了我。谢谢! – Andrew 2010-06-18 16:20:45

相关问题