事實上,主要是如何考慮周遊元素個數變化的動态集合(因為周遊過程要執行删除)
特别是對于 C# ,不能使用 foreach,foreach 是隻讀周遊的。
伺服器端版本
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) // 方法1,正序周遊
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) private void SwapListBox(ListBox src, ListBox dst)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) {
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) for (int i = 0; i < src.Items.Count; )
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) {
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) ListItem item = src.Items[i];
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) if (item.Selected)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) {
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) src.Items.Remove(item);
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) // 保持選中狀态
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) item.Selected = ((dst.SelectionMode == ListSelectionMode.Multiple || dst.SelectedIndex < 0) ? item.Selected : false);
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) dst.Items.Add(item);
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) continue;
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) }
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) i++;
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) }
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) }
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) // 方法1,倒序周遊
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) private void SwapListBox2(ListBox src, ListBox dst)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) {
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) for (int i = src.Items.Count - 1; i >= 0;i-- )
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) {
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) ListItem item = src.Items[i];
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) if (item.Selected)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) {
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) src.Items.Remove(item);
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) // 保持選中狀态
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) item.Selected = ((dst.SelectionMode == ListSelectionMode.Multiple || dst.SelectedIndex < 0) ? item.Selected : false);
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) dst.Items.Add(item);
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) }
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) }
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) }
用戶端版本
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) // 方法1,正序周遊
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) function SwapListBox(srcId, dstId)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) {
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) //debugger;
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) var src = document.getElementById(srcId);
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) var dst = document.getElementById(dstId);
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) for (var i = 0; i < src.options.length; )
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) {
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) var opt = src.options[i];
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) if (opt.selected)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) {
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) src.options[i] = null; // 設定空引用,則直接删除
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) // 保持選中狀态
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) opt.selected = ((dst.multiple || dst.selectedIndex < 0) ? opt.selected : false);
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) dst.options[dst.options.length] = opt; // 追加項,dst.options[dst.options.length],js 數組特有的文法,不需要顯示 add
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) continue;
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) }
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) i++;
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) }
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) }
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) // 方法2,反序周遊
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) function SwapListBox2(srcId, dstId)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) {
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) var src = document.getElementById(srcId);
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) var dst = document.getElementById(dstId);
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) for (var i = src.options.length - 1; i >=0; i--)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) {
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) var opt = src.options[i];
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) if (opt.selected)
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) {
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) src.options[i] = null; // 設定空引用,則直接删除
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) // 保持選中狀态
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) opt.selected = ((dst.multiple || dst.selectedIndex < 0) ? opt.selected : false);
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) dst.options[dst.options.length] = opt;
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) }
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) }
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) }
頁面效果
ASP.NET DEMO 11: 兩個 ListBox 互選(伺服器端與用戶端版本) 完整源碼
下載下傳
轉載于:https://www.cnblogs.com/hzuIT/articles/823648.html