0

外部ファイルをロードせずに、単語数(任意のページ)のブックマークレットを作成しようとしています。要するに、ブックマークレットをクリックして、画面上のテキストをドラッグして選択し、選択した単語数でアラートを受け取ることができるようにしたいのです。私は正しい機能を得るためにこれをまとめましたが、ブックマークレットへの変換につまずいています:

<html>
<body onmouseup="countWords()">     
<article id="page1">
    <h1>Home 2</h1>
    <p>Welcome 2</p>
    <script type="text/javascript">
function countWords() {
var selectedText = document.activeElement;
var selection = selectedText.value.substring(selectedText.selectionStart, selectedText.selectionEnd);
words = selection.match(/[^\s]+/g).length;
if (words !== "") {
    alert(words);
}
}
</script>
    <div><textarea></textarea></div>
</article>
</body>
</html>

最初の問題:間違ったツリーを吠えている可能性がありますが、onmouseupをactiveElementにアタッチしたかったのですが、これを行う方法がわかりません。

2番目の問題:外部ファイルを使用せずにこれをブックマークレットに挿入できますか?

どんな援助でも大歓迎です。

一番、

タムラー

エスケープ文字...それが問題でした。

実例は次のとおりです。

<a href="javascript:(document.onmouseup=function(){var selectedText=document.activeElement;var selection=selectedText.value.substring(selectedText.selectionStart,selectedText.selectionEnd);words=selection.match(/[^\s]+/g).length;if(words!==&quot;&quot;){alert(words)}})();" target="_blank">Word Count</a>
4

2 に答える 2

1

これを試してください。コードが少し複雑になっているようです。

alert(window.getSelection().toString().match(/\w+/g).length);

最初の部分はwindow.getSelection().toString()、実際に選択されたテキストを取得します。最後の部分は、すべての単語に一致する基本的な正規表現であり、一致をカウントします。必要に応じて、多かれ少なかれ寛大になるように正規表現を変更できます。

これは、すでに選択されている単語の数を警告するだけです。ブックマークレットを押した後に選択したい場合は、ウィンドウのマウスアップイベントをリッスンする関数で上記をラップできます。

編集:これが本格的なブックマークレットの例です:

<a href="javascript: _wcHandler = function() { var _wcSelection, _wcCount; ((_wcSelection = window.getSelection().toString().match(/[^\s]+/g)) && (_wcCount = _wcSelection.length) && (window.removeEventListener('mouseup', _wcHandler) || alert(_wcSelection.length))); }; window.addEventListener('mouseup', _wcHandler);">Word Count</a>

...そして読み取り可能な形式で書かれています:

_wcHandler = function() {
    var _wcSelection, _wcCount; 
    ((_wcSelection = window.getSelection().toString().match(/[^\s]+/g)) 
     && (_wcCount = _wcSelection.length) 
     && (window.removeEventListener('mouseup', _wcHandler) 
         || alert(_wcCount))); 
}; 
window.addEventListener('mouseup', _wcHandler);​

そして最後に、あなたがいじくり回すためのjsFiddle:http: //jsfiddle.net/Rr2KU/1/

于 2012-10-19T13:27:21.213 に答える
1

間違ったツリーを吠えている可能性がありますが、onmouseupをactiveElementにアタッチしたかったのですが、これを行う方法がわかりません。

ドキュメントに添付してください。document.onmouseup = countWordsまたdocument.onmouseup = function(){...}

外部ファイルを使用せずにこれをブックマークレットに挿入できますか?

はい:

javascript:document.onmouseup=function(){var selectedText=document.activeElement;var selection=selectedText.value.substring(selectedText.selectionStart,selectedText.selectionEnd);words=selection.match(/[^\s]+/g).length;if(words!==""){alert(words)}}

http://www.google.com/search?q=bookmarklet+generator

しかし、私は使用しました:http: //javascriptcompressor.com/

于 2012-10-19T14:35:02.503 に答える