2010-06-18 56 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

相關問題