2

これは私のページソースです:

<body>
<div>
    <p><span id="1">word</span> <span id="2">word</span> </p>
    <div><span id="3">word</span> <span id="4">word</span></div>
    <ul>
        <li><span id="5">word</span> <span id="6">word</span></li>
    </ul>
    </ul>
    <p><span id="7">word</span> <span id="8">word</span> <strong><span id="9">word</span></strong> </p>
</div>
</body>

ユーザーが選択したスパンを強調表示(新しいクラスを適用)して、IDを取得したいと思います。

window.getSelection()を介してユーザーが選択したコンテンツを取得できますが、選択したテキストノードを取得する方法がわかりません。

よろしくお願いします、ローガン

4

1 に答える 1

5

は、開始()と終了()を含むオブジェクト(refwindow.getSelection() )を返します。したがって、提供したHTMLに基づいて(IDを数字のみを使用しないように変更して(ref))、ここにデモがあります。任意の単語をクリックするか、単語のグループを選択して、「赤い」クラス名が付けられていることを確認します。selectionanchorNodeextentNode

変更されたHTML

<div>
    <p><span id="s1">word1</span> <span id="s2">word2</span> </p>
    <div><span id="s3">word3</span> <span id="s4">word4</span></div>
    <ul>
        <li><span id="s5">word5</span> <span id="s6">word6</span></li>
    </ul>
    <p><span id="s7">word7</span> <span id="s8">word8</span> <strong><span id="s9">word9</span></strong> </p>
</div>

脚本

$('div').bind('mouseup', function(){

    var i,
        s = window.getSelection(),
        // get ID of starting node
        start = parseInt((s.anchorNode.parentNode.id || '').substring(1), 10),
        // get ID of end node
        end = parseInt((s.extentNode.parentNode.id || '').substring(1), 10),
        // start gathering spans
        spans = $('#s' + start);

    // remove selected class
    $('span[id^=s]').removeClass('red');

    // add each span
    for (i = start; i <= end; i++) {
        spans = spans.add( $('#s' + i) );
    }

    // add selected class
    spans.addClass('red');

});

</ p>

于 2012-08-24T12:24:54.657 に答える