Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: selection
Forum PHP.pl > Forum > Po stronie przeglądarki > JavaScript
a79rtur
czesc, mam nastepujacy problem:
selection to zaznaczony tekst w polu pewnym
jak dam alert(selection); to zwraca mi część ciągu która jest zaznaczona
jak mam zrobic zeby tą część pogrubiło i zapisalo do zmiennej pogrubione ?
próbuje:

oRTE.document.selection=('<b>' + selection + '</b>');

ale cos nie robi sad.gif
revyag
Chyba nie chcesz wyświetlić w alercie pogrubinego tekstu ? Z tego co wiem nie da się.
Jeśli chodzi o pogrubiebnie tekstu. To robisz tak:
Kod
var mess=document.selection.bold();
a79rtur
nie o to chodzilo, troche namieszałem smile.gif
kawalek kodu ponizej coby sie zorientowac co do struktury. rte to ramka iframe w ktorej jest wyswietlany html a selection to zaznaczony w tej ramce kawalek tekstu. chodzi o to zeby zmienic jakos ten zaznaczony kawałek (pogrubic, dodac znaki na poczatku i koncu, zmienic kolor, cokolwiek, nie tylko wbudowane metody) i zapisac spowrotem na miejsce.

oRTE = frames[rte];
var selection = oRTE.document.selection;

var html=oRTE.document.body.innerHTML;
revyag
Jeśli chodzi o manipulację własciwościami tekstu, to wbudowanymi metodami możesz zmienić wszystko co chcesz.
np.
Kod
//rozmiar:
    selection.fontsize("20");
//pogrubienie
    selection.bold();
//color
    selection.fontcolor("red");

Zobacz też link: http://www.w3schools.com/js/js_obj_string.asp
Próbujesz zrobic jakiś edytor ? Bo jeśli tak trzeba się zabrać do tego inaczej smile.gif
a79rtur
no nie zupelnie zrobic, potrzebuje do edytora tego, dorobic opcje wyboru stylu, tzn zaznaczasz fragment i zostaje on opleciony <div style=" ..."> tekst zazanczony </div> do calosci tekstu w ramce wiem jak zrobic, ale do selecta nie. jeszcze smile.gif
jak daje
Kod
oRTE.document.selection.fontsize("20");


to wyskakuje w IE: object error
w Mozilla Firefox: TypeError: oRTE.document.selction has no properities
Kod
var selection = oRTE.document.selection;
alert(selection);

daje mi prawidlowo czyli zaznaczony fragment tekstu. a mi go pasuje obrobic i wpisac zpowrotem.
revyag
Zmień:
Kod
oRTE.document.selection.fontsize("20");

na
Kod
oRTE.document.selection.createRange().text.fontsize("20");
a79rtur
to samo sad.gif
revyag
A w kiedy masz ten błąd ? Pokaż na przykładzie kodu, chodzi o to gdzie i jak robisz tą zamianę. To co napisałem napewno działa bo są to standardowe operacje na stringach.
a79rtur
ok. cala funkcja

Kod
//Function to format text in the text box
function FormatText(rte, command, option) {
    var oRTE;
    if (document.all) {
  oRTE = frames[rte];
  
  //get current selected range
  var selection = oRTE.document.selection;
  if (selection != null) {
     rng = selection.createRange();
  }
    } else {
  oRTE = document.getElementById(rte).contentWindow;
  
  //get currently selected range
  var selection = oRTE.getSelection();
  rng = selection.getRangeAt(selection.rangeCount - 1).cloneRange();
    }
    
    try {
  if ((command == "forecolor") || (command == "hilitecolor")) {
     //save current values
     parent.command = command;
     currentRTE = rte;
    
     //position and show color palette
     buttonElement = document.getElementById(command + '_' + rte);
     // Ernst de Moor: Fix the amount of digging parents up, in case the RTE editor itself is displayed in a div.
     document.getElementById('cp' + rte).style.left = getOffsetLeft(buttonElement, 4) + "px";
     document.getElementById('cp' + rte).style.top = (getOffsetTop(buttonElement, 4) + buttonElement.offsetHeight + 4) + "px";
     if (document.getElementById('cp' + rte).style.visibility == "hidden") {
    document.getElementById('cp' + rte).style.visibility = "visible";
    document.getElementById('cp' + rte).style.display = "inline";
     } else {
    document.getElementById('cp' + rte).style.visibility = "hidden";
    document.getElementById('cp' + rte).style.display = "none";
     }
  } else if (command == "createlink") {
     var szURL = prompt("Wpisz adres strony:", "http://");
     try {
    //ignore error for blank urls
    oRTE.document.execCommand("Unlink", false, null);
    oRTE.document.execCommand("CreateLink", false, szURL);
     } catch (e) {
    //do nothing
     }
    
  } else if (command == "createemail") {
     var szEMAIL = prompt("Wpisz adres email:", "mailto:");
     try {
    //ignore error for blank urls
    oRTE.document.execCommand("Unlink", false, null);
    oRTE.document.execCommand("CreateLink", false, szEMAIL);
     } catch (e) {
    //do nothing
     }
    
  } else if (command == "uzyjstylu") {
    
//////////////////////////////////////////////////////////////////////////////////////////
     oRTE.document.selection.createRange().text.fontsize("20");
/////////////////////////////////////////////////////////////////////////////////////////  
    
  } else if (command == "usunstyl") {
     oRTE.focus();
     //oRTE.document.getSelection().style.visibility = "hidden";

         var html=oRTE.document.body.innerHTML;
         var html_male=html.toLowerCase();
        
         start_div_open = html_male.indexOf( "\<div style" ); //zwraca poczatek otwarcia div'a
         //alert(start_div_open);
        
         end_div_open = html_male.indexOf( "\"\>", start_div_open);
        
         end_div_open += 2;
         start_div_close = html_male.lastIndexOf("</div>");
      
         //alert(start_div_close);
         if (start_div_open!=-1 && start_div_close!=-1)
         {
          html=html.substring(end_div_open, start_div_close);
          oRTE.document.body.innerHTML=html;
         }
        
      oRTE.focus();
    
  } else {
     oRTE.focus();
        oRTE.document.execCommand(command, false, option);
     oRTE.focus();
  }
    } catch (e) {
  alert(e);
    }
}
revyag
Tak chyba nie można tego użyć, trzeba to zapisać do zmiennej i tą zmienną się posłużyć. Poza tym na stronie, którą podałeś takie coś jest zrobione więc nie wiem w czym problem ?
a79rtur
to moze by zrobic tak ze mam miejsce w ciagu html gdzie sie zaczyna i konczy selekcja i podmienie w nim na inny ciag? jak znalezc ten poczatek i koniec ? selekcji a nie stringu który jest w selecji to umiem, ale przeciez moze byc kilka stringow takich samych a selekcja jest jedna.
w tym edytorze to jest zrobione ale na znacznikach (no, zalezy jeszcze od przegladarki jakiej uzywasz, w firefoxie jest na stylach). i tam sa uzywane wbudowane metody np. dla pogrubienia:

Kod
...
.. onClick="FormatText(\'' + rte + '\', \'bold\', \'\')"></td>') ... (wywołanie)
...
...
function FormatText(rte, command, option) {
...
   oRTE.document.execCommand(command, false, option);  
...
}
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.