2012-10-19 83 views
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但我在如何做到這一點的損失。

第二個問題:我可以在不使用外部文件的情況下將其插入小書籤中嗎?

任何援助將不勝感激。

最佳,

Tamler

轉義字符,...這是問題。

這裏是一個工作示例:

<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> 
+0

在其瀏覽器中,你的目標是? – Bergi

+0

我正在Chrome中測試。 – Tamler

+0

您的代碼應該無法運行,因爲未定義selectedTextArea。 – epascarello

回答

1

試試這個,它看起來像你的代碼是一個有點令人費解:

​​

第一部分,window.getSelection().toString()將獲得實際選定的文本。最後一部分是匹配每個單詞的基本正則表達式,然後對匹配進行計數。你可以修改正則表達式或多或少地適應你的需求。

這將僅僅提醒已選中的已經的字數,如果您希望在選中書籤後進行選擇,則可以將上述內容封裝在偵聽窗口mouseup事件的函數中。

編輯:這是一個完整的例子書籤:

<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/

+0

'/ \ w + /'不匹配變音符號等我建議使用'/ \ S +/g' – Bergi

+0

感謝您使用簡化的代碼示例,但它不起作用,與上面的示例相同它也沒有解決我所陳述的問題。 – Tamler

+0

我用一個實際的功能書籤編輯了我的答案。你是否需要將mouseup偵聽器連接到'activeElement'或者是一個窗口級別的事件偵聽器?編輯我的代碼以使用'activeElement'只是相對簡單的。 – Cecchi

1

我可能會吠叫錯誤的樹,但我想附加onmouseup到activeElement,但是我是不知道如何做到這一點。

將其附加到文檔。 document.onmouseup = countWordsdocument.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/