2010-06-02 20 views
9

Dal mio previous question per la selezione di testo html specifico, sono passato attraverso this link per comprendere l'intervallo in stringa html.html - intervallo di selezione - ottenere l'intervallo + nodo iniziale + nodo finale + distanza

Per selezionare un testo specifico nella pagina html. Dobbiamo seguire questa procedura.

ipotizzata HTML: lo script

<h4 id="entry1196"><a 
    href="http://radar.oreilly.com/archives/2007/03/call_for_a_blog_1.html" 
    class="external">Call for a Blogger's Code of Conduct</a></h4> 

<p>Tim O'Reilly calls for a Blogger Code of Conduct. His proposals are:</p> 

<ol> 
    <li>Take responsibility not just for your own words, but for the 
     comments you allow on your blog.</li> 
    <li>Label your tolerance level for abusive comments.</li> 
    <li>Consider eliminating anonymous comments.</li> 
</ol> 

java per effettuare la selezione per intervallo

var range = document.createRange(); // create range 
var startPar = [the p node];   // starting parameter 
var endLi = [the second li node]; // ending parameter 
range.setStart(startPar,13);   // distance from starting parameter. 
range.setEnd(endLi,17);    // distance from ending parameter 
range.select();      // this statement will make selection 

io voglio fare questo in modo invertito. Voglio dire, supponiamo che la selezione sia fatta dall'utente sul browser (safari). La mia domanda è: come possiamo ottenere il nodo di partenza (dato che qui abbiamo 'il nodo p') e il nodo finale (dato che qui 'abbiamo il secondo nodo li') e anche l'intervallo (dato che qui abbiamo 13,17) ?

Edit: i miei sforzi (Da this question)

var sel = window.getSelection(); 

    if (sel.rangeCount < 1) { 
     return; 
    } 
    var range = sel.getRangeAt(0); 
    var startNode = range.startContainer, endNode = range.endContainer; 

    // Split the start and end container text nodes, if necessary 
    if (endNode.nodeType == 3) { 
     endNode.splitText(range.endOffset); 
     range.setEnd(endNode, endNode.length); 
    } 

    if (startNode.nodeType == 3) { 
     startNode = startNode.splitText(range.startOffset); 
     range.setStart(startNode, 0); 
    } 

Ma, eppure mi sono confuso circa ottenere come, se selezionato è il primo paragrafo o secondo o terzo, o selezionato è in prima intestazione o seconda voce o quello ....

+0

Potrebbe chiarire esattamente che cosa si desidera ottenere? –

+0

@Tim Down - lasciami spiegare. L'utente effettua la selezione e tocca un pulsante. Devo memorizzare l'intervallo selezionato dall'utente. –

risposta

6

La memorizzazione dell'intervallo selezionato è semplice. Quanto segue restituirà solo il primo intervallo selezionato (Firefox almeno supporta selezioni multiple):

<script type="text/javascript"> 

function getSelectionRange() { 
    var sel; 
    if (window.getSelection) { 
     sel = window.getSelection(); 
     if (sel.rangeCount) { 
      return sel.getRangeAt(0); 
     } 
    } else if (document.selection) { 
     return document.selection.createRange(); 
    } 
    return null; 
} 

var range; 

</script> 
<input type="button" onclick="range = getSelectionRange();" 
    value="Store selection"> 

range avranno proprietà startContainer (il nodo contenente l'inizio dell'intervallo), startOffset (un indirizzo all'interno del nodo contenitore inizio : un offset di carattere nel caso di nodi di testo e offset figlio in elementi), endContainer e endOffset (equivale alle proprietà di avvio). Range è ben documentato da its specification e MDC.

In IE, range conterrà un TextRange, che funziona in modo molto diverso. Piuttosto che i nodi e gli offset, i TextRang si occupano di caratteri, parole e frasi. Il sito di Microsoft ha una documentazione: http://msdn.microsoft.com/en-us/library/ms533042%28VS.85%29.aspx, http://msdn.microsoft.com/en-us/library/ms535872%28VS.85%29.aspx.

+0

ma range è il tipo di variabile javascript. Come posso scrivere su file usando l'obiettivo c. So che è una nuova domanda. Lo sto chiedendo. –

+0

Come stai proponendo di far comunicare il tuo JavaScript con Objective-C? Presumo che questo sia un progetto iPhone/iPad di cui stiamo parlando, quindi sei interessato solo a Mobile Safari? –

+0

Sì, esattamente - Sto sviluppando un'applicazione per iPhone. Ora, ho ancora un problema su come memorizzare la variabile java nell'applicazione iphone. –