View Full Version : kako promjeniti boju linije u textarea gdje se nalazi kursor?
evo kaj mi treba ...
ima neko ideju kako promjeniti boju linije u textarea gdje se nalazi kursor?
pišem neki editor pa mi to treba ...
... može samo ideja ne cjelo rješenje ...
zahvaljujem
:gitara:
Marac Varac
27-09-2005, 13:10
ne može se.
ne može se.
sve se može kad se hoće ...
nisu se mogle ni druge stvari pa sam napravio ...
... ako netko ima ideju kako samo neka napiše :zhuja:
Probaj sa nečim ovakvim
.active-selection-true, .active-selection-true .active-row-cell {
color: #ffff00!important;
background-color: #00ff00!important;
}
Ili probaj nešto sa ovime
<style>
textarea.boja1{
background-color:000000;
color:00ff00;
}
textarea.boja2{
background-color:000000;
color:ff0000;
}
</style>
<textarea
rows="12" cols="74"
class="boja1"
onMouseOver="this.className='boja2"
onMouseOut="this.className='boja1">
.
.
.
your text
.
.
.
</textarea>
ma meni treba da se samo jedan redak(linija) promjeni boju ....
znam da je pušink za napraviti ...
evo print screen ....
1.png je kako imam sada
2.png kako hoću
uglavnom tamo gdje je žuto - tamo je kursor (ne miš)
kao što marac kaže....
moram priznat da to još nisam vidio, ni čuo da netko to želi:D
a ... rješit ću ja to ... 100% ... :hmmmmmm:
nikola.hfc
27-09-2005, 19:43
kada bi radio wysiwyg editor sa contentEditable-om onda bi mogao mozda to napraviti..ovako bi morao raditi neki tezi hack da iscrtas neki DIV na mjestu gdje ti je kursor odredjene visine i sirine..
bilo bi lakse da upotrijebis neki vec gotov wysiwyg editor te ga modifciras mrvicu.
Platypus
27-09-2005, 19:43
a ... rješit ću ja to ... 100% ... :hmmmmmm:
Prouči kako rade WYSIWYG editori. Ako se može prikazati cijeli HTML, onda se može i to. Neće biti lako ;)
Jedno od mogućih riješenje dosta je jednostavno, a radi se o pozicioniranju polu-prozirnog objekta (npr. div) na točno određeno mjesto iznad textarea objekta.
Teorija:
Saznati gdje se kursora nalazi u textarea objektu (broj znakova koji se nalaze ispred njega).
saznati broj ponavljanja "\n" znaka od početka niza znakova koji se nalazi u textarea objektu do pozicije kursora (dobijemo zapravo broj redova)
broj redova pomnožiti s visinom reda znakova
dobivenom broju iz točke 3 dodati apsolutnu poziciju textarea objekta od vrha stranice
pozicionirati polu-prozirni objekt na apsolutnu poziciju koju smo dobili u točki 4
Evo napisao sam nekoliko redova JS koda koji počinju riješavati taj problem. Pogledaj ovdje (http://gorweb.net/dev/textarea-selected-row/textarea-selected-row.html).
Ovo radi najbolje u Firefox (Gecko). u IEu ne radi uopće (nema textarea.selectionStart), u Operi pokazivač nije proziran i ne pozicionira se najbolje.
Budući da si toliko samouvjeren prepuštam ti sređivanje svih tih problema s kompatibilnosti, a i ostalih koje tu nisam ni spominjao.
Za one koji nemaju Firefox ovako to izgleda: http://gorweb.net/dev/textarea-selected-row/textarea-selected-row.gif
Sijetio sam se i verzije koju je nešto lakše implementirati. Možeš koristiti pozadinsku sliku da bi označio red. Problem je u tome da se nećeš moći prilagoditi ako se CSSom promijeni visina reda.
hvala svima, ma to sam i počeo raditi, div, koji je iza prozirnog textarea .. sve je super, radi ali još je problem da ne izleti van ...
... mislim rješit ću to ja već, poslat ću vam printscreen da vidite ...
Nisam siguran da ćeš moći koristiti z-index na TEXTAREA i sličnim elementima u IE-u.
Ukoliko me sjećanje ne vara, IE ne iscrtava "input" kontrole na isti način na koji iscrtava ostale elemente web stranice, već izravno "usađuje" standardne Windows kontrole kao prozore-djecu prozora-platna (child windows). Stoga se ti elementi (zasebni prozori) uvijek pojavljuju vizualno IZNAD svih ostalih HTML elemenata na stranici, ma kako bili pozicionirani CSS-om. Svakako to provjeri prvo ukoliko ciljaš i na IE 6 i starije.
ma rješio sam žutu liniju, prikazuje se ispod texta ... sad je samo rebam pozicionirati ... (radi u svim browserima ... ) :gitara:
kako naći poziciju kursora na ekranu (ne miša)?
ili poziciju u kojem je retku u textarea?
imam neki kod koji radi samo u FF ... bahh ...
Ukoliko me sjećanje ne vara, IE ne iscrtava "input" kontrole na isti način na koji iscrtava ostale elemente web stranice, već izravno "usađuje" standardne Windows kontrole kao prozore-djecu prozora-platna (child windows). Stoga se ti elementi (zasebni prozori) uvijek pojavljuju vizualno IZNAD svih ostalih HTML elemenata na stranici, ma kako bili pozicionirani CSS-om. Svakako to provjeri prvo ukoliko ciljaš i na IE 6 i starije.
Problem jedino s SELECT elementom kao što možeš vidjeti ovdje (http://gorweb.net/dev/input-show.html) (govorim za IE 6, za ostalo ne znam)..
kako naći poziciju kursora na ekranu (ne miša)?
ili poziciju u kojem je retku u textarea?
imam neki kod koji radi samo u FF ... bahh ...
Kao i obićno google jako puno toga zna, pa ako ga pitaš: "
ie textarea cursor position (http://www.google.com/search?hl=hr&q=ie+textarea+cursor+position&btnG=Google+pretraga&lr=)" jedan od odgovora će ti biti ovaj (http://www.faqts.com/knowledge_base/view.phtml/aid/5967) koji sadrži ovu funkciju:
// FROM: http://www.faqts.com/knowledge_base/view.phtml/aid/5967;
function getCursorPos(textElement) {
if(textElement.selectionStart) return textElement.selectionStart;
//save off the current value to restore it later,
var sOldText = textElement.value;
//create a range object and save off it's text
var objRange = document.selection.createRange();
var sOldRange = objRange.text;
//set this string to a small string that will not normally be encountered
var sWeirdString = '#%~';
//insert the weirdstring where the cursor is at
objRange.text = sOldRange + sWeirdString; objRange.moveStart
('character', (0 - sOldRange.length - sWeirdString.length));
//save off the new string with the weirdstring in it
var sNewText = textElement.value;
//set the actual text value back to how it was
objRange.text = sOldRange;
//look through the new string we saved off and find the location of
//the weirdstring that was inserted and return that value
for (i=0; i <= sNewText.length; i++) {
var sTemp = sNewText.substring(i, i + sWeirdString.length);
if (sTemp == sWeirdString) {
var cursorPos = (i - sOldRange.length);
return cursorPos;
}
}
}
Dodao sam jedino "if(textElement.selectionStart) return textElement.selectionStart;" na početak da radi u FF-u.
Prouči u MSDN-u document.onselectionchange događaj, document.selection objekt i TextArea objekt, možda ti pomogne. Za procjenu, probaj ovo:<html>
<head>
<title>X</title>
<script type="text/javascript">
function handleSelChange()
{
var strOpis = "type=" + document.selection.type + "<br>";
var trFirst = document.selection.createRange();
strOpis += "boundingHeight=" + trFirst.boundingHeight + "<br>";
strOpis += "boundingHeight=" + trFirst.boundingHeight + "<br>";
strOpis += "boundingTop=" + trFirst.boundingTop + "<br>";
strOpis += "boundingWidth=" + trFirst.boundingWidth + "<br>";
strOpis += "htmlText=" + trFirst.htmlText + "<br>";
strOpis += "offsetLeft=" + trFirst.offsetLeft + "<br>";
strOpis += "offsetTop=" + trFirst.offsetTop + "<br>";
strOpis += "text=" + trFirst.text + "<br>";
var cout = document.getElementById( "console" );
cout.innerHTML = strOpis;
}
document.onselectionchange = handleSelChange;
</script>
</head>
<body>
<textarea>Yada yada.</textarea>
<p>Probaj selektirati i ovo.</p>
<p id="console">asdas</p>
</body>
</html>
nešto ću ja već smislit, poslat ću vam da vidite ...
evo, bacite oko
RADI!!!
još radim na njoj ali uglavnom radi ... trebam još neke prilagodbe za linux, mac ... operu .... svi komentari i prijedlozi su naravno više nego dobrodošli
<html>
<head>
<title>highlight ....</title>
<style>
#Box {
border: 1px solid black;
height: 500px;
position: relative;
z-index: 10;
width: 500px;
padding: 0px;
}
#Line {
background-color: #FFFF00;
height: 16px;
position: absolute;
z-index: 1;
top: 15px;
left: 10px;
width: 500px;
}
#pero {
background-color: transparent;
width: 500px;
height: 500px;
line-height: 16px;
border: 0px solid red;
}
body {
margin-top: 14px;
margin-left: 10px;
padding: 0px;
}
</style>
<script type="text/javascript">
function pero123(myField) {
var Highlight = document.getElementById("Line");
//IE support
if (document.selection) {
myField.focus();
mySelection = document.selection.createRange();
mySelection.text = 'žžž';
dummy = myField.createTextRange();
dummy.findText('žžž');
dummy.select();
dummy.scrollIntoView();
var caretPos = myField.value.indexOf('žžž');
document.selection.clear();
dummy.select();
myField.focus();
}
//MOZILLA/NETSCAPE support
else if (myField.selectionStart || myField.selectionStart == '0') {
var caretPos = myField.selectionStart;
}
else {
}
var NewLine = (navigator.appName.toLowerCase().indexOf("internet explorer") >= 0) ? "\r\n" : "\n";
var strAllText = myField.value.substr(0, caretPos); // get all the text in myTextArea
var arrLines = strAllText.split(NewLine); // get lines in myTextArea
var LinesCount = (strAllText == "") ? 1 : arrLines.length; // get amount of lines
var Scroller = myField.scrollTop;
var FromTop = parseInt(LinesCount*16) - Scroller;
Highlight.style.top = FromTop + "px";
} // end of the 'ScriptEditorWidth()' function
</script>
</head>
<body>
<div id="Box">
<form>
<textarea id="pero" rows="25" onclick="pero123(this);" onkeypress="pero123(this);" onkeyup="pero123(this);"></textarea>
</form>
</div>
<div id="Line"></div>
</body>
</html>
Probaj drzati Shift i stisni strelice.
Je li to zeljeni efekt?
Guba, guba... :)
Kada selektiraš nešto (IE), to se - kako je Bubbi primjetio - odmah obriše.
Probaj drzati Shift i stisni strelice.
Je li to zeljeni efekt?
ma treba samo dodat onkeydown ... ovo je samo za primjer ..
Guba, guba... :)
Kada selektiraš nešto (IE), to se - kako je Bubbi primjetio - odmah obriše.
znam ... radim na tome isto ..
ako neko zna bolju skriptu koja govori poziciju kursora u textarea (IE i opera)
netreba mi broj retka samo kod kojeg je char ...
__DAdo__
06-10-2005, 22:34
slušaj sada ovo što sam ja smislio ideja je tako luda da je možda i moguća :)
zašto koristit textarea ? zašto da ne iskoristimo obične text boxove?
sad se pitate kako e slušaj sad ovu ludu ideju
Za početak napravimo neki div i damo mu bordere nešto ovako
on bi trebao izgledat kao textarea
<div id="textarea" style="width:750px; height:400px; border:1px solid #000000;">
i sada magija :)
sada bi tu stavili text box sa <input type="text" name="box1" size="1" />
i sada kad neko klikne na di automatski mu fokus stavimo na box1 i sad ovaj piše nešto na svaki znak koji ovaj unese izvršava se funkcija koja provjerava da nije unio razmak ili novi red (enter) ukoliko je unio razmak automatski se stvara novi input sa imenom box2
nešto ovako:
var div = (document.all) ? document.all("textarea") : document.getElementById("textarea");
sat.innerHTML .= "<input type='text' name='box"+brojac+" style="" />"';
odmah pored boxa1 bordere smo obrisali pa se ne vide i boja bi morala bbiti transparentna tako da se ništa ne vidi cijelu priču upotpunjujem sa time da se
u pozadini se drži negdje hidden input u koji se zapravo sprema cijeli text
kad pritisne enter onda se upiše <br /><input......
i opet tako naravno kod svega toga još je funkcija koja provjerava sadržaj pa ako je neka riječ koju treba drukčije obojati onda se zamjenjuje stil za taj input
nadam se da je bar neko nešt skužil ja bum ovo probal realizirati
bum vam se javil uskoro :)
vBulletin® v3.7.4, Copyright ©2000-2009, Jelsoft Enterprises Ltd.