| 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: 15 let
|
|||
0