<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      jQuery實現微博發布框@好友出現列表功能

      先上圖演示下:

       

       

       

       

      看完圖就直接上代碼吧,其中有幾處寫死的地方,我有提示,你們自己改下就是了。

      //@顯示用戶列表
      (function($) {

        //判斷是否為子元素
        function isParent(obj,pobj){
          while (obj != undefined && obj != null && obj.tagName.toUpperCase() != 'BODY'){
            if (obj == pobj){
              return true;
            }
            obj = obj.parentNode;
          }
          return false;
        }

              
          $.fn.showAtUsers = function() {
          
              if($("#at_textarea").length == 0){
                  $("body").append("<pre id='at_textarea'></pre><div id='at_userslist'></div>");   
              //首先模擬一個輸入框和顯示用戶列表的div,有人說pre會把有回車的內容,跟原先一樣的展示,但測試后,算出@的位置還是不對,難道pre一說是傳說嗎。。。 } return this.each(function(){ var t = null,li_Index=1, $at_textarea=$("#at_textarea"), $at_userslist=$("#at_userslist"); $(this).on("keydown click", function(e) { //必須用keydown,否則上下鍵使光標會移動 var _key=e.keyCode, Textarea = this; if($at_userslist.is(":visible") && (_key==40 || _key==38 || _key==13)){ TipLiSelect(Textarea,_key); return false; }else{ if(t !==null){ clearTimeout(t); } t = setTimeout(function(){ drawTextarea(Textarea); getAt(Textarea); },300); } }); $("body").on("click",function(e){ if(!isParent(e.target,$at_userslist[0])){ hiddenTip(); } }); //獲取光標 var getCursor = function(textarea) { var rangeData={ start: 0, end: 0, text: "" }; textarea.focus(); if (textarea.setSelectionRange) { // W3C rangeData.start= textarea.selectionStart; rangeData.end = textarea.selectionEnd; rangeData.text = textarea.value.substring(0, rangeData.end); } else if (document.selection) { // IE var i, oS = document.selection.createRange(), oR = document.body.createTextRange(); oR.moveToElementText(textarea); rangeData.text = oS.text; rangeData.bookmark = oS.getBookmark(); for (i = 0; oR.compareEndPoints('StartToStart', oS) < 0 && oS.moveStart("character", -1) !== 0; i ++) { if (textarea.value.charAt(i) == '\n') { i ++; } } rangeData.start = i; rangeData.end = rangeData.text.length + rangeData.start; rangeData.text = textarea.value.substring(0,i); } return rangeData; }, //設置光標 setCursor = function(textarea, rangeData) { textarea.focus(); if (textarea.setSelectionRange) { // W3C textarea.setSelectionRange(rangeData.start, rangeData.end); } else if (textarea.createTextRange) { // IE var oR = textarea.createTextRange(); if(textarea.value.length === rangeData.start) { oR.collapse(false); oR.select(); } else { oR.moveToBookmark(rangeData.bookmark); oR.select(); } } },

               //插入選擇的用戶名稱 add = function(txtData,Object) { var oValue,atPos,nStart,nEnd,nValue,st,sR, textarea = Object.textarea; setCursor(textarea, Object.rangeData); oValue = textarea.value; //@符所在的位置 atPos = parseInt(Object.pos) - parseInt(Object.len); nValue = oValue.substring(0,atPos) + "@" +txtData + " " + oValue.substring(Object.rangeData.end); nStart = nEnd = atPos + txtData.length +2; st = textarea.scrollTop; textarea.value = nValue; // 賦值后,scrollTop會變回0,重新設置scrollTop if(textarea.scrollTop != st) { textarea.scrollTop = st; } if (textarea.setSelectionRange) { // W3C textarea.setSelectionRange(nStart, nEnd); } else if (textarea.createTextRange) {
                    // IE下測試坑爹,又要插入,又要光標插入到姓名+空格后面,不是最末尾哦,我對TextRange不熟悉,所以寫成下面這樣,還好測試OK。
                    //如果高人有更好的方法,望誠心討教,回復我下,先謝謝了。 oValue = oValue.substring(Object.rangeData.end);//光標后面的字符 st = oValue.replace(/\n/g,'').length;//替換掉換行 sR = document.selection.createRange(); sR.moveEnd("character", -st); sR.select(); } }, //匹配@符 getAt = function(textarea) { var _rangeData=getCursor(textarea); var k=_value=_rangeData.text; var _reg=/@[^@\s]{0,20}$/g;//匹配@符后面0至20個字符 if(_value.indexOf("@")>= 0 && _value.match(_reg)) { var _postion=_rangeData.start; var _oValue=_value.match(_reg)[0];//找到value中最后匹配的數據 var _AT={};//存儲輸入內容被截取后的字段信息 if(_oValue==="@"){ _AT['m'] = "namihui";//自己改喜歡的標記字符,說明此次輸入@后面沒有字,我因為是給娜米匯做網站,所以這樣寫了。 _AT['l'] = _value.slice(0, -1).replace(/\n/g,'<br>'); //@前面的文字,把回車轉為br _AT['r'] = '';//@后面的文字 _AT['pos']=_postion;//光標位置 _AT['len']=1;//光標位置至@的長度 _AT['rangeData']=_rangeData; _AT['textarea']=textarea; showTip(_AT); }else if(/^@[a-zA-Z0-9\u4e00-\u9fa5_-]+$/.test(_oValue) && !/\s/.test(_oValue)) { _AT['m'] = _oValue.slice(1);//用戶輸入的字符 如@娜米匯,即"娜米匯" _AT['l'] = _value.slice(0, -_oValue.length).replace(/\n/g,'<br>'); //@前面的文字 _AT['r'] = k.slice(_postion - _oValue.length+1, k.length);//@后面的文字 _AT['pos']=_postion;//光標位置 _AT['len']=_oValue.length;//光標位置至@的長度 _AT['rangeData']=_rangeData; _AT['textarea']=textarea; showTip(_AT); } else { hiddenTip(); } } else { hiddenTip(); } }, drawTextarea= function(textarea){ var _left=$(textarea).offset().left + parseInt($(textarea).css("padding-left")) + "px", _top=$(textarea).offset().top + parseInt($(textarea).css("padding-top")) +"px", _width=$(textarea).width() +"px", _lineHeight=$(textarea).css("line-height"), Tstyle="line-height:"+_lineHeight+";width:"+_width+";left:"+_left+";top:"+_top; $at_textarea.attr("style",Tstyle); } showTip = function(obj){ var url = 'json2.html';//url你們改成后臺拉數據的地址就行,格式在此文章的后面,我有說明 if(obj.m == "namihui"){//這里寫另外個地址是為了演示@最近聯系人與根據輸入后臺返回匹配的數據,2種不同情況寫的死數據 url = 'json.html'; } $.ajax({ url: url, type:'post', data:{"key":obj.m}, success: function(result){ buidTip(result,obj); } }) }, //創建tip,設置tip的位置 buidTip = function(html,obj) { var _left, _top, Ttop, citeOfs, _string="<span>"+obj['l']+"</span>"+"<cite>@</cite>"+"<span>"+obj['r']+"</span>"; $at_textarea.html(_string); citeOfs=$at_textarea.find("cite").offset(); _left=citeOfs.left; _top=citeOfs.top+parseInt($at_textarea.css("line-height")); Ttop = parseInt($at_textarea.offset().top+$(obj.textarea).height()); if(_top > Ttop) { _top = Ttop; } $at_userslist.css({ "left":_left, "top":_top, "display":"block" }).html('<ul>'+html+'</ul>').find("li").eq(1).addClass("on"); TipLiEvent(obj); $(obj.textarea).data("at",obj); }, hiddenTip = function() { $at_userslist.hide().find("li").off(); }, //鍵盤選擇列表操作 TipLiSelect = function(textarea,key){ var li = $at_userslist.find("li"), _len=li.length; switch(key) { case 40: //向下鍵選擇 li_Index++; if(li_Index>_len-1) { li_Index=1; } li.removeClass("on").eq(li_Index).addClass("on"); break; case 38: //向上鍵選擇 li_Index--; if(li_Index<1) { li_Index=_len-1; } li.removeClass("on").eq(li_Index).addClass("on"); break; case 13: //enter鍵 var txtData=li.filter(".on").text(), obj = $(textarea).data("at"); add(txtData,obj); hiddenTip(); break; default: }; }, //添加列表綁定事件 TipLiEvent = function(obj) { $at_userslist.find("li").on("click", function() { if($(this).index() == 0) { obj.textarea.focus(); } else { var txtData=$(this).text(); add(txtData,obj); } hiddenTip(); return false; }).not(":first").hover( function() { li_Index=$(this).index(); $(this).addClass("on").siblings().removeClass("on"); return false; }, function() { return false; }); }; }); } })(jQuery);

      //綁定@顯示用戶列表
      $(“textarea”).showAtUsers();

       

      附上json.html里的格式:

      <li class="tit">選擇最近@的人或直接輸入</li>
      <li>花蛤</li>
      <li>楠小樹</li>
      <li>蒼井空</li>
      <li>盼逆邵年</li>
      <li>波多野結衣</li>
      <li>魔獸德羅巴</li>
      <li>安安薔薇</li>

      json2.html的格式一樣,就文字不一樣而已,上面圖就是顯示不同情況。

      再附上CSS:

      /*發布框內 @好友列表提示 */
      #at_userslist{position: absolute; top:-999px; left:0; display: none; z-index: 99; width: 180px; overflow: hidden; }
      #at_userslist ul{border: 1px solid #ccc; padding: 1px; background-color: #fff; border-radius: 2px;}
      #at_userslist ul li{width: :100%; height: 24px; line-height: 24px; background-color: #fff; padding: 0 10px;}
      #at_userslist ul li.tit{color: #999; border-bottom: 1px dashed #eee;}
      #at_userslist ul li.on{background-color: #e8e8e8; cursor: pointer; color: #000;}
      #at_textarea{font-family:和你發布框的字體要一樣哦,不然定位有細微差別;position:absolute;overflow:hidden;z-index:-9999; top:-999px; left:0; }

       

      最后附上一些關于TextRange的博文介紹,代碼受用了:

      http://www.planabc.net/2010/11/17/get_textarea_cursor_position/
      http://www.rzrgm.cn/sweting/archive/2009/07/12/1521782.html

       

       

      posted @ 2012-12-28 17:29  盼少  閱讀(2840)  評論(4)    收藏  舉報
      主站蜘蛛池模板: 久久久久香蕉国产线看观看伊| 亚洲一区二区三区自拍偷拍| 麻豆一区二区三区香蕉视频 | 无码h片在线观看网站| 四虎国产精品免费久久| 中文字幕久久久久人妻中出| 国产永久免费高清在线| 无码天堂亚洲国产av麻豆| 精品久久久中文字幕人妻| AV无码免费不卡在线观看| 亚洲色一区二区三区四区| 中文字幕无码中文字幕有码a| 中文字幕国产日韩精品| 韩国三级+mp4| 国产精品一码二码三码| 凌源市| 精品无码国产一区二区三区AV| 男人+高清无码+一区二区| 久久天天躁狠狠躁夜夜躁2o2o| 久久狠狠高潮亚洲精品夜色| 免费人成在线观看成人片| 欧美变态另类zozo| 成人综合婷婷国产精品久久蜜臀 | 河东区| 九九热在线这里只有精品| 亚洲性一交一乱一伦视频| 欧美 日韩 国产 成人 在线观看| 人人妻一区二区三区| 国产精品内射在线免费看| 国内精品久久人妻无码不卡| 无码高潮爽到爆的喷水视频| 亚洲区一区二区激情文学| 亚洲成人av在线资源| 国产-第1页-浮力影院| 国产成人精品国内自产色| 亚洲日韩性欧美中文字幕| 一区二区三区精品偷拍| 午夜一区二区三区视频| 婷婷四房播播| 精品一卡2卡三卡4卡乱码精品视频 | 亚洲一区二区精品另类|