Autor | Zpráva | ||
---|---|---|---|
Kelghor Profil * |
#1 · Zasláno: 16. 3. 2011, 11:25:57
Ahoj, řeším miniproblém, nemohu se dostat k jádru pudla a prostě nedaří se mi najít dobrý návod...
Co potřebuji? Pomoci JS vytvořit tlačítko, které vloží tag do TextArea a navíc kursor myši (nebo lépe řečeno kursor v textu.. taková ta blikací svislá čára, když něco píšete) se zobrazila mezi tagy. Jako příklad jak bych chtě+l aby to fungobalo, kliknete si na B tady na foru při psaní zprávy.. přěsně tohle potřebuju aby mi to dělalo, v čem je fígl prosím? |
||
Darker Profil |
#2 · Zasláno: 16. 3. 2011, 16:15:04
Proč si to neprozkoumáš? Funkce která se spustí je insertTag("b");
|
||
Kelghor Profil * |
#3 · Zasláno: 16. 3. 2011, 21:44:48
No, prozkoumávat se v cizím kódu je dost náročný, kór, když jsem doufla, že mi to někdo kdo to umí nějak jednoduše vysvětlí jaké finty se tam užívá...
|
||
Darker Profil |
#4 · Zasláno: 17. 3. 2011, 02:03:50
Kelghor:
„prozkoumávat se v cizím kódu je dost náročný“ Vysvětlovat taky. function insertTag(tag) { var parovy = tag != "hr"; var startTag = "[" + tag + "]"; var endTag = ("[/" + tag + "]").replace(/(\[\/(?:pre|font))[^\]]+(\])|\[\/hr\]/gi, "$1$2"); var selectionType = tag.match(/^pre|hr|mod/i) ? "" : "word"; var selectionTrim = tag.match(/^pre|hr|mod/i) ? /^\n+|\n+$/g : /^\s+|\s+$/g; var tac = getTextareaSelection({context: true, type: selectionType, trim: selectionTrim}); var tagText = tac[1]; if (tag.match(/^([bi]|del|edit|small|pre\w*)$/i)) { var opened = tac[0].lastIndexOf(startTag) > tac[0].lastIndexOf(endTag); var closed = (tac[2] + endTag).indexOf(endTag) < (tac[2] + startTag).indexOf(startTag); tagText = tagText.replace(new RegExp((startTag.replace(/pre\w*/, "pre\\w*") + ("|" + endTag)).replace(/\[/g, "\\$&"), "gi"), ""); if (opened && closed) { var temp; temp = startTag; startTag = endTag; endTag = temp; } else if (opened) { if (!tag.match(/[bi]/)) { startTag = ""; } } else if (closed) { endTag = ""; } } else if (tag == "img") { tagtext = tagText.replace(/\[\/?([bi]|del|edit|small|pre[a-z]*|img(left|right)?|hr|mod|url(\=[^\]]+)?)\]/gi, ""); } var text2insert = startTag + tagText + endTag; var cursor = tagText ? text2insert.length : startTag.length; insertText(text2insert, cursor); } function insertText(inserted, cursor) { try { if (inserted != null) { inserted = inserted.toString().replace(/\r\n?/g, "\n"); if (typeof cursor == "undefined") { cursor = inserted.length; } } var textarea = document.forms.postMsg.elements.poslText; if (textarea.readOnly) { return; } var scrollTop = textarea.scrollTop; var scrollHeight = textarea.scrollHeight; textarea.focus(); if (typeof textarea.selectionStart != "undefined") { var sel = [], st = textarea.value.substr(0, textarea.selectionStart).replace(/\r\n?/g, "\n"); sel[0] = Math.max(st.length + (typeof cursor != "number" ? cursor[0] : cursor), 0); st += inserted != null ? inserted + textarea.value.substr(textarea.selectionEnd).replace(/\r\n?/g, "\n") : textarea.value.substr(textarea.selectionStart).replace(/\r\n?/g, "\n"); sel[1] = Math.min(sel[0] + (typeof cursor != "number" ? cursor[1] : 0), st.length); if (window.opera) { for (var i = 0; i < 2; i++) { var p = st.substr(0, sel[i]); sel[i] += p.length - p.replace(/\n/g, "").length; } } if (inserted != null) { textarea.value = st; } textarea.selectionStart = sel[0]; textarea.selectionEnd = sel[1]; } else if (typeof document.selection != "undefined") { var range = document.selection.createRange(); var start = 0, end = 0; if (inserted != null) { start = end = - inserted.length; range.text = inserted; } else { end = - range.text.replace(/\r\n?/g, "\n").length; } if (typeof cursor != "number") { range.moveStart("character", start + cursor[0]); range.moveEnd("character", end + cursor[0] + cursor[1]); } else { if (start + cursor) { range.move("character", start + cursor); } } range.select(); } } catch (exc) { } if (window.netscape) { textarea.scrollTop = scrollTop + (textarea.scrollHeight - scrollHeight); } } |
||
Chamurappi Profil |
#5 · Zasláno: 17. 3. 2011, 02:31:53
Reaguji na Darkera:
To, co jsi zvýraznil, nestačí. Celá ta funkce je složitější, než potřebuje. Kdo ji nepochopí, neměl by si ji odtud vypůjčovat. Reaguji na Kelghora: Viz použití djpw.js. |
||
Darker Profil |
#6 · Zasláno: 17. 3. 2011, 16:20:13
Chamurappi:
„To, co jsi zvýraznil, nestačí.“ Zvýrazňovat ve dvě ráno znamená jistý neúspěch. Stejně jsem sem (záměrně) nenakopíroval všechno. |
||
Časová prodleva: 13 let
|
0