微博@符号的用户名提示效果。(想@到谁?)_javascript技巧
在下面的文本框输入“@” 看一下效果吧!
已经解决 IE,FF ,CHORME 主流浏览器的兼容问题。有需要这个JS的朋友可以直接拿去用。
由于我实在无法把这个效果插入到这遍文章里。所以只能让大家下载我演示的文件了。
下载演示文件
思路
首先你是针对网页里面的textarea(这是一个很麻烦的标签) 这个标签的一些操作。
所以关于他的一些API你必须收集到。(下面会有提供)
A:是一个textarea
B:当前光标位置
我们的方案是 首先在页面创建一个(C)具有 visibility:hidden;(占位但是不显示) 属性的DIV。
他的位置,宽度,高度与A文本框一样(这意味着C现在与A已经重叠了)。
然后我们获取到B位置前面的所有文本(可以用js获取到),写入C 里面,在追加一个;
那么ID为FFF 的span标签的位置就是 B的位置。
HTML页面会多了一些这样的标签
可以获取到@符号的位置,其他问题都只是调试的问题了,就不多说了。你可以直接下载源码
textarea 的一些操作
/*
* TT textarea 操作函数
* info(t) 基本信息
* getCursorPosition(t) 光标位置
* setCursorPosition(t, p) 设置光标位置
* add(t,txt) 添加内容到光标处
*/
var TT = {
info:function(t){
var o = t.getBoundingClientRect();
var w = t.offsetWidth;
var h = t.offsetHeight;
return {top:o.top, left:o.left, width:w, height:h};
},
getCursorPosition: function(t){
if (document.selection) {
t.focus();
var ds = document.selection;
var range = null;
range = ds.createRange();
var stored_range = range.duplicate();
stored_range.moveToElementText(t);
stored_range.setEndPoint("EndToEnd", range);
t.selectionStart = stored_range.text.length - range.text.length;
t.selectionEnd = t.selectionStart + range.text.length;
return t.selectionStart;
} else return t.selectionStart
},
setCursorPosition:function(t, p){
var n = p == 'end' ? t.value.length : p;
if(document.selection){
var range = t.createTextRange();
range.moveEnd('character', -t.value.length);
range.moveEnd('character', n);
range.moveStart('character', n);
range.select();
}else{
t.setSelectionRange(n,n);
t.focus();
}
},
add:function (t, txt){
var val = t.value;
var wrap = wrap || '' ;
if(document.selection){
document.selection.createRange().text = txt;
} else {
var cp = t.selectionStart;
var ubbLength = t.value.length;
t.value = t.value.slice(0,t.selectionStart) + txt + t.value.slice(t.selectionStart, ubbLength);
this.setCursorPosition(t, cp + txt.length);
};
},
del:function(t, n){
var p = this.getCursorPosition(t);
var s = t.scrollTop;
t.value = t.value.slice(0,p - n) + t.value.slice(p);
this.setCursorPosition(t ,p - n);
D.FF && setTimeout(function(){t.scrollTop = s},10);
}
}
主要的一些JS
var AutoTips = function(A){
var elem = A.id ? D.$(A.id) : A.elem;
var checkLength = 5;
var _this = {};
var key = '';
_this.start = function(){
if(!D.$(config.boxID)){
var h = html.slice();
var info = TT.info(elem);
var div = D.DC('DIV');
var bs = D.BS();
h = h.replace('$top$',(info.top + bs.top)).
replace('$left$',(info.left + bs.left)).
replace('$width$',info.width).
replace('$height$',info.height).
replace('$SCTOP$','0');
div.innerHTML = h;
document.body.appendChild(div);
}else{
_this.updatePosstion();
}
}
_this.keyupFn = function(e){
var e = e || window.event;
var code = e.keyCode;
if(code == 38 || code == 40 || code == 13) {
if(code==13 && D.$(config.wrap).style.display != 'none'){
_this.enter();
}
return false;
}
var cp = TT.getCursorPosition(elem);
if(!cp) return _this.hide();
var valuep = elem.value.slice(0, cp);
var val = valuep.slice(-checkLength);
var chars = val.match(/(\w+)?@(\w+)$|@$/);
if(chars == null) return _this.hide();
var char = chars[2] ? chars[2] : '';
D.$(config.valuepWrap).innerHTML = valuep.slice(0,valuep.length - char.length).replace(/\n/g,'
').
replace(/\s/g,' ') + config.positionHTML;
_this.showList(char);
}
_this.showList = function(char){
key = char;
var data = DS.inquiry(friendsData, char, 5);
var html = listHTML.slice();
var h = '';
var len = data.length;
if(len == 0){_this.hide();return;}
var reg = new RegExp(char);
var em = ''+ char +'';
for(var i=0; i
h += html.replace(/\$ACCOUNT\$|\$NAME\$/g,data[i]['name']).
replace('$SACCOUNT$',hm).replace('$ID$',data[i]['user']);
}
_this.updatePosstion();
var p = D.$(config.position).getBoundingClientRect();
var bs = D.BS();
var d = D.$(config.wrap).style;
d.top = p.top + 20 + bs.top + 'px';
d.left = p.left - 5 + 'px';
D.$(config.listWrap).innerHTML = h;
_this.show();
}
_this.KeyDown = function(e){
var e = e || window.event;
var code = e.keyCode;
if(code == 38 || code == 40 || code == 13){
return selectList.selectIndex(code);
}
return true;
}
_this.updatePosstion = function(){
var p = TT.info(elem);
var bs = D.BS();
var d = D.$(config.boxID).style;
d.top = p.top + bs.top +'px';
d.left = p.left + bs.left + 'px';
d.width = p.width+'px';
d.height = p.height+'px';
D.$(config.boxID).scrollTop = elem.scrollTop;
}
_this.show = function(){
selectList.list = D.$(config.listWrap).getElementsByTagName('li');
selectList.index = -1;
selectList._this = _this;
_this.cursorSelect(selectList.list);
elem.onkeydown = _this.KeyDown;
D.$(config.wrap).style.display = 'block';
}
_this.cursorSelect = function(list){
for(var i=0; i
return function(){selectList.setSelected(i)};
})(i);
list[i].onclick = _this.enter;
}
}
_this.hide = function(){
selectList.list = null;
selectList.index = -1;
selectList._this = null;
D.ER(elem, 'keydown', _this.KeyDown);
D.$(config.wrap).style.display = 'none';
}
_this.bind = function(){
elem.onkeyup = _this.keyupFn;
elem.onclick = _this.keyupFn;
elem.onblur = function(){setTimeout(_this.hide, 100)}
//elem.onkeyup= fn;
//D.EA(elem, 'keyup', _this.keyupFn, false)
//D.EA(elem, 'keyup', fn, false)
//D.EA(elem, 'click', _this.keyupFn, false);
//D.EA(elem, 'blur', function(){setTimeout(_this.hide, 100)}, false);
}
_this.enter = function(){
TT.del(elem, key.length, key);
TT.add(elem, selectList.list[selectList.index].getElementsByTagName('A')[0].rel+' ');
_this.hide();
return false;
}
return _this;
}
作者:idche

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

Was soll ich tun, wenn Google Chrome meldet, dass der Inhalt dieses Tabs geteilt wird? Wenn wir Google Chrome verwenden, um einen neuen Tab zu öffnen, stoßen wir manchmal auf die Meldung, dass der Inhalt dieses Tabs geteilt wird. Was ist also los? Auf dieser Website erhalten Benutzer eine detaillierte Einführung in das Problem, dass Google Chrome dazu auffordert, den Inhalt dieser Registerkarte zu teilen. Google Chrome weist darauf hin, dass der Inhalt dieser Registerkarte freigegeben wird: 1. Öffnen Sie Google Chrome. In der oberen rechten Ecke des Browsers werden drei Punkte angezeigt. Klicken Sie zum Ändern auf das Symbol das Symbol. 2. Nach dem Klicken wird unten das Menüfenster von Google Chrome angezeigt und die Maus bewegt sich zu „Weitere Tools“.

Wenn Sie ein Win11-System verwenden, werden Sie manchmal aufgefordert, den Benutzernamen und das Passwort des Administrators einzugeben. In diesem Artikel wird erläutert, wie Sie mit dieser Situation umgehen. Methode 1: 1. Klicken Sie auf [Windows-Logo] und drücken Sie dann [Umschalt+Neustart], um in den abgesicherten Modus zu wechseln, oder gehen Sie folgendermaßen in den abgesicherten Modus: Klicken Sie auf das Startmenü und wählen Sie „Einstellungen“. Wählen Sie „Update und Sicherheit“; wählen Sie „Jetzt neu starten“ unter „Wiederherstellung“ und geben Sie die Optionen ein. Wählen Sie „Fehlerbehebung“ – „Erweiterte Optionen“ – „Starteinstellungen“.

In den Anfängen der sozialen Medien konnten Sie Ihren Profilnamen mehrmals ändern, doch heute ist die Änderung Ihres Namens in jeder Social-Media-App mit eigenen Einschränkungen verbunden. Wenn Sie Ihren Anzeigenamen oder Benutzernamen auf Instagram ändern möchten, erfahren Sie im folgenden Beitrag, wie oft Sie diese ändern können, wie das geht und was Sie tun können, wenn Sie Ihren Namen auf der Plattform nicht ändern können. Wie ändere ich den Anzeigenamen und den Benutzernamen auf Instagram? Instagram bietet zwei Orte für Ihren Namen: Ihren Anzeigenamen und Ihren Benutzernamen. Glücklicherweise können Sie beide in der mobilen App problemlos ändern. Der Anzeigename ist der, den Sie normalerweise „true“ eingeben würden

OOBE oder Out-of-Box Experience ist ein Prozess, der für Benutzer entwickelt wurde, um sie durch die verschiedenen Phasen der Schritte nach der Installation zu führen. Dazu gehören Rechte- und Vereinbarungsseiten, Anmeldeseiten, WLAN- oder Netzwerkverbindungsoptionen usw. Wenn Sie OOBEKeyboard-, OOBELOCAL- oder OOBEREGION-Probleme erhalten, können Sie nicht mit den letzten Installationsschritten fortfahren. Mach dir keine Sorge. Es gibt einige einfache Lösungen, mit denen Sie dieses Problem beheben können. Problemumgehungen – Bevor Sie etwas anderes tun, probieren Sie diese normalen Lösungen aus: 1. Wenn Sie eine Fehlermeldung erhalten, klicken Sie auf die Eingabeaufforderung „Erneut versuchen“. Versuchen Sie es noch mindestens 7 bis 8 Mal. 2. Überprüfen Sie die Netzwerkkonnektivität. Wenn Sie eine Ethernet-Verbindung oder WLAN verwenden

Heutzutage haben viele Windows-Benutzer, die Spiele lieben, den Steam-Client aufgerufen und können alle guten Spiele suchen, herunterladen und spielen. Allerdings haben die Profile vieler Benutzer möglicherweise genau denselben Namen, was es schwierig macht, ein Profil zu finden oder sogar ein Steam-Profil mit anderen Konten von Drittanbietern zu verknüpfen oder Steam-Foren beizutreten, um Inhalte zu teilen. Dem Profil wird eine eindeutige 17-stellige ID zugewiesen, die gleich bleibt und vom Benutzer zu keinem Zeitpunkt geändert werden kann, der Benutzername oder die benutzerdefinierte URL hingegen schon. Unabhängig davon kennen einige Benutzer ihr Steamid nicht und es ist wichtig, dies zu wissen. Wenn Sie nicht wissen, wie Sie das Steamid Ihres Kontos finden, geraten Sie nicht in Panik. In diesem Artikel

In iOS 17 hat Apple seine gesamte Auswahl an Klingeltönen und Texttönen überarbeitet und bietet mehr als 20 neue Sounds, die für Anrufe, Textnachrichten, Alarme und mehr verwendet werden können. Hier erfahren Sie, wie Sie sie sehen können. Viele neue Klingeltöne sind länger und klingen moderner als ältere Klingeltöne. Dazu gehören Arpeggio, Broken, Canopy, Cabin, Chirp, Dawn, Departure, Dolop, Journey, Kettle, Mercury, Galaxy, Quad, Radial, Scavenger, Seedling, Shelter, Sprinkle, Steps, Story Time, Tease, Tilt, Unfold und Valley . Reflection bleibt die Standardklingeltonoption. Außerdem stehen über 10 neue Texttöne für eingehende Textnachrichten, Voicemails, Benachrichtigungen über eingehende E-Mails, Erinnerungsbenachrichtigungen und mehr zur Verfügung. Um auf neue Klingeltöne und Texttöne zuzugreifen, stellen Sie zunächst sicher, dass Ihr iPhone

Wie gebe ich den Benutzernamen von Railway 12306 ein? Sie können den Benutzernamen in der Railway 12306-APP eingeben, aber die meisten Freunde wissen nicht, wie sie den Benutzernamen von Railway 12306 eingeben. Als nächstes folgt das grafische Tutorial zum Ausfüllen Im vom Herausgeber bereitgestellten Benutzernamen Railway 12306 können interessierte Benutzer vorbeischauen. Tutorial zur Verwendung von Railway 12306 So geben Sie den Railway 12306-Benutzernamen ein: 1. Öffnen Sie zunächst die Railway 12306-APP und klicken Sie unten auf der Hauptseite auf [Registrieren]. 2. Geben Sie dann auf der Seite mit der Registrierungsfunktion den Benutzernamen, das Passwort und die Bestätigung ein Passwort usw.; 3. Geben Sie abschließend ein. Sobald Sie fertig sind, können Sie die Benutzerregistrierung ausfüllen.

Der WLAN-Benutzername bezieht sich auf den Administrator-Benutzernamen des WLAN-Routers. Dieser Benutzername, die IP-Adresse des Routers und das Standard-Administratorkennwort sind normalerweise auf der Unterseite des WLAN-Routers aufgedruckt und können auch im Handbuch des WLAN-Routers gefunden werden ; der standardmäßige Administratorbenutzer der meisten Router. Der Name ist sowohl admin als auch das Verwaltungskennwort ist ebenfalls admin.
