Expand to word boundary.

Shows an extremely naive way to expand selection to word boundaries.

HTML

<script src="http://rangy.googlecode.com/svn/trunk/dev/uncompressed/rangy-core.js"></script>
<p id="q" contenteditable="true">Example text with <b>stu</b>ff and more stuff</p>
<button id="expand">Expand</button>

JavaScript

var $q = $("#q");
var $expand = $("#expand");

var word_sep = " ";

function expand() {
    var sel = rangy.getSelection();
    var range = sel.getRangeAt(0);

    var start_node = range.startContainer;
    if (start_node.nodeType === Node.TEXT_NODE) {
        var sep_at = start_node.nodeValue.lastIndexOf(word_sep, range.startOffset);
        range.setStart(start_node, (sep_at !== -1) ? sep_at + 1 : 0);
    }

    var end_node = range.endContainer;
    if (end_node.nodeType === Node.TEXT_NODE) {
        var sep_at = end_node.nodeValue.indexOf(word_sep, range.endOffset);
        range.setEnd(end_node, (sep_at !== -1) ? sep_at : range.endContainer.nodeValue.length);
    }
    sel.setSingleRange(range);
}

$expand.click(expand);