John See
John See

Reputation:

Javascript document.all and document.getSelection - Firefox alternative

The script below will replace selected word in a textarea. But it only works on IE. Any idea how to make it work on Firefox? (The problem seems to lie in (document.all)? document.selection.createRange() : document.getSelection();)

<SCRIPT LANGUAGE="JavaScript">
    <!--//
    var seltext = null;
    var repltext = null;
    function replaceit() 
    {
        seltext = (document.all)? document.selection.createRange() : document.getSelection();
        var selit = (document.all)? document.selection.createRange().text : document.getSelection();
        if (selit.length>=1){
            if (seltext) {
                repltext= prompt('Please enter the word to replace:', ' '); 
                if ((repltext==' ')||(repltext==null)) repltext=seltext.text;
                seltext.text = repltext;
                window.focus()
            }
        }
    }
    //-->
</SCRIPT>
</HEAD>
<BODY>
    <form name="f">
        <textarea cols='40' rows='10' name='msg'></textarea>

        <input type="button" name="b" value="Replace" onClick="replaceit();">
    </form>
</BODY>

Upvotes: 1

Views: 19256

Answers (4)

Rob Dawson
Rob Dawson

Reputation: 1347

Window.getSelection is the method that makes a DOMSelection object available in firefox. Perhaps this is what you are looking for.

Upvotes: 0

Dullroar
Dullroar

Reputation: 162

My O'Reilly flamingo book is at work, but I seem to remember reading the document.getSelection() specifically does not work with textarea elements, only the "non-editable" parts of the page.

Upvotes: 0

geowa4
geowa4

Reputation: 41833

OK, so document.getSelection() returns a string in FF. String::text does not exist. So you can't set that.

The basc idea of what you need to do (and it'll work in both browsers):

Get the text area by its id--you'll need to set an id attribute on the textarea. Get the starting and ending positions of the selection. Then take three substrings: 0->start, start->end, end->string.length. Replace the middle substring with whatever they put in the prompt. Set the text of the textarea to your newly formed string.

The exact how is up to you, I just gave you a flavor of the procedure.

Upvotes: 1

Devin Ceartas
Devin Ceartas

Reputation: 4829

The document.all bit is being used as a test to see if it's IE or not. The way it's written document.getSelection() is what would be used in Firefox and document.selection.createRange() in IE

See http://www.hscripts.com/tutorials/javascript/ternary.php

So the problem isn't document.all, but rather that the getSelection() isn't working. Not sure why exactly as that's not a construct I've used recently, but try window.getSelection() as per this: (and google for others if this doesn't do the trick) http://www.webdeveloper.com/forum/archive/index.php/t-138944.html

Upvotes: 2

Related Questions