2010-01-15 13 views
6

Ich möchte die Dokumentauswahl ändern (der Benutzer wird derzeit mit der Maus oder der Tastatur ausgewählt), wie geht das über den Browser?Wie ändert man die Dokumentauswahl in Javascript?

+2

Können Sie genauer sein, was Sie unter "Ändern der Dokumentauswahl" verstehen? – sberry

+0

Benutzer derzeit mit der Maus oder der Tastatur ausgewählt .... ist es klar? Tut mir leid für mein schlechtes Englisch. – lovespring

+0

Siehe http://stackoverflow.com/questions/2075304/how-to-modify-the-document-selection-in-javascript, verwenden Sie einfach die iframe.window.selection. –

Antwort

6

Ich habe nicht mit Textauswahl genug gearbeitet, um echte Hilfe zu bieten, aber was Sie versuchen zu tun, kann getan werden. Sie wollen in die folgenden beiden Funktionen suchen:

  1. createRange()MSDN | MDC
  2. getRangeAt()MDC

Ich weiß, es Cross-Browser implementiert werden kann. Sie können hier einen Teil davon in Aktion sehen:

http://fuelyourcoding.com/a-few-strategies-for-using-javascript/

Durch nach unten scrollen und das Elephant-Symbol klicken, das das Evernote-Skript verwendet. Allerdings wählt mein Skript zuerst den Hauptinhaltsbereich (Sie sehen es orange blinken) und dann wird die Auswahl aufgehoben, sobald die Aufnahme gemacht wurde.

Hier ist ein Mini-jQuery-Plugin, das es tut. Es wurde von mir von einer Seite angepasst, und wie die Kommentare sagen, fühle ich mich schrecklich, wenn ich mich nicht erinnere. Es ist wirklich wichtig, ich passte es zu jQuery zu beachten, aber der Code kam von einem Ort, an dem sie erklärt, wie es geht:

// Adapted this from somewhere. Feel horrible for not remembering. 
$.fn.autoSelect = function(){ 
    var selectTarget = this[0]; // Select first element from jQuery collection 
    if(selectTarget != null) { 
     if(selectTarget.tagName == 'TEXTAREA' || (selectTarget.tagName == "INPUT" && selectTarget.type == "text")) { 
      selectTarget.select(); 
     } else if(window.getSelection) { // FF, Safari, Opera 
      var sel = window.getSelection(); 
      var range = document.createRange(); 
      range.selectNode(selectTarget); 
      sel.removeAllRanges(); 
      sel.addRange(range); 
     } else { // IE 
      document.selection.empty(); 
      var range = document.body.createTextRange(); 
      range.moveToElementText(selectTarget); 
      range.select(); 
     }; 
    }; 
    return this; // Don't break the chain 
}; 

Es scheint, dieses Skript ein paar Plätze online ist, aber here is another variation on it

5

Als Beispiel, und am einfachsten, nehmen wir an, Sie möchten die Auswahl des Benutzers verschieben, um den Inhalt eines Elements zu enthalten. Das Folgende wird in allen gängigen Browsern funktionieren:

function selectElementContents(el) { 
    var body = document.body, range, sel; 
    if (body.createTextRange) { 
     range = body.createTextRange(); 
     range.moveToElementText(el); 
     range.select(); 
    } else if (document.createRange && window.getSelection) { 
     range = document.createRange(); 
     range.selectNodeContents(el); 
     sel = window.getSelection(); 
     sel.removeAllRanges(); 
     sel.addRange(range); 
    } 
} 

selectElementContents(document.getElementById("someElement")); 
+0

danke, Tim. – lovespring

Verwandte Themen