Frågan#1 såg på sidan http://www.interactivetools.com/products/htmlarea/index.html#demo deras editor om man markerara en text i editorn som är bold så markeras knappen som symbolisera Bold markerad... hur gör man en sådan kontroll?
Man får manuellt leta sig uppåt bland parentobjekten och se om man hittar ett STRONG-objekt. Kolla i källkoden hur de har gjort...
Som jag har fattat så använder dom en class 'btnDown' sen kollade jag på .js filen och det ända jag hittar på btnDown var denna funktion:
function editor_updateToolbar(objname,action) {
var config = document.all[objname].config;
var editor_obj = document.all["_" +objname+ "_editor"];
// disable or enable toolbar
if (action == "enable" || action == "disable") {
var tbItems = new Array('FontName','FontSize','FontStyle'); // add pulldowns
for (var btnName in config.btnList) { tbItems.push(config.btnList[btnName][0]); } // add buttons
for (var idxN in tbItems) {
var cmdID = tbItems[idxN].toLowerCase();
var tbObj = document.all["_" +objname+ "_" +tbItems[idxN]];
if (cmdID == "htmlmode" || cmdID == "about" || cmdID == "showhelp" || cmdID == "popupeditor") { continue; } // don't change these buttons
if (tbObj == null) { continue; }
var isBtn = (tbObj.tagName.toLowerCase() == "button") ? true : false;
if (action == "enable") { tbObj.disabled = false; if (isBtn) { tbObj.className = 'btn' }}
if (action == "disable") { tbObj.disabled = true; if (isBtn) { tbObj.className = 'btnNA' }}
}
return;
}
// update toolbar state
if (editor_obj.tagName.toLowerCase() == 'textarea') { return; } // don't update state in textedit mode
var editdoc = editor_obj.contentWindow.document;
// Set FontName pulldown
var fontname_obj = document.all["_" +objname+ "_FontName"];
if (fontname_obj) {
var fontname = editdoc.queryCommandValue('FontName');
if (fontname == null) { fontname_obj.value = null; }
else {
var found = 0;
for (i=0; i<fontname_obj.length; i++) {
if (fontname.toLowerCase() == fontname_obj[i].text.toLowerCase()) {
fontname_obj.selectedIndex = i;
found = 1;
}
}
if (found != 1) { fontname_obj.value = null; } // for fonts not in list
}
}
// Set FontSize pulldown
var fontsize_obj = document.all["_" +objname+ "_FontSize"];
if (fontsize_obj) {
var fontsize = editdoc.queryCommandValue('FontSize');
if (fontsize == null) { fontsize_obj.value = null; }
else {
var found = 0;
for (i=0; i<fontsize_obj.length; i++) {
if (fontsize == fontsize_obj[i].value) { fontsize_obj.selectedIndex = i; found=1; }
}
if (found != 1) { fontsize_obj.value = null; } // for sizes not in list
}
}
// Set FontStyle pulldown
var classname_obj = document.all["_" +objname+ "_FontStyle"];
if (classname_obj) {
var curRange = editdoc.selection.createRange();
// check element and element parents for class names
var pElement;
if (curRange.length) { pElement = curRange[0]; } // control tange
else { pElement = curRange.parentElement(); } // text range
while (pElement && !pElement.className) { pElement = pElement.parentElement; } // keep going up
var thisClass = pElement ? pElement.className.toLowerCase() : "";
if (!thisClass && classname_obj.value) { classname_obj.value = null; }
else {
var found = 0;
for (i=0; i<classname_obj.length; i++) {
if (thisClass == classname_obj[i].value.toLowerCase()) {
classname_obj.selectedIndex = i;
found=1;
}
}
if (found != 1) { classname_obj.value = null; } // for classes not in list
}
}
// update button states
var IDList = Array('Bold','Italic','Underline','StrikeThrough','SubScript','SuperScript','JustifyLeft','JustifyCenter','JustifyRight','InsertOrderedList','InsertUnorderedList');
for (i=0; i<IDList.length; i++) {
var btnObj = document.all["_" +objname+ "_" +IDList[i]];
if (btnObj == null) { continue; }
var cmdActive = editdoc.queryCommandState( IDList[i] );
if (!cmdActive) { // option is OK
if (btnObj.className != 'btn') { btnObj.className = 'btn'; }
if (btnObj.disabled != false) { btnObj.disabled = false; }
} else if (cmdActive) { // option already applied or mixed content
if (btnObj.className != 'btnDown') { btnObj.className = 'btnDown'; }
if (btnObj.disabled != false) { btnObj.disabled = false; }
}
}
}
Ser lite för "bra" ut för att jag ens ska fatta vad allt betyder..
Är det något med "queryCommandState" så att den känner av det eller?
Ah, queryCommandState och queryCommandValue verkar kunna sköta en del av det...
Hur gör man för att köra en sådan kod att den läser av vad marekraren är?