簡體   English   中英

在Greasemonkey腳本中使用jQuery強制換行?

[英]Forcing word-wrap with jQuery in a Greasemonkey script?

我正在編寫一個將jQuery用於論壇的GreaseMonkey腳本。 我正試圖強迫帖子中的長單詞打亂,以免拉長頁面。

本來我有這樣的事情:

        $('.post').html(function(i, v) {
            var edited = false;
            // Break tags, links, and line breaks into separate 
            var words = v.replace(/<span(.+)<\/script\>/gi, " ").replace(/\</ig, " ").replace(/http:[^ ]+/gi, " ").replace(/&[^;]+;/gi, " ").replace(/[\n|\r]/g, " ").split(" ");
            for (var ii = 0; ii < words.length; ii++) {
                if (words[ii].length > word_length) {
                    edited = true;
                    v = v.replace(words[ii], insert_breaks(words[ii]));
                }
            }
            if (edited) return v;
        });

該站點在每個帖子中自然具有不同的元素(例如,粗體標簽,錨點等),因此我將其刪除以僅保留文本,然后檢查其字長(之前已定義),並用破損的部分替換了該字。 有些帖子將包含一些JavaScript,其格式如<span>...</span><script>...</script> ,這就是為什么我使用您看到的第一個替換內容的原因。

我遇到的問題是,當一個單詞損壞並返回v ,元素中包含的本機JavaScript損壞了,而GreaseMonkey腳本在替換元素的HTML之后暫停。

我看不到如何使用CSS word-break ,因為我需要設置寬度-我無法為每個用戶設置該寬度,並且由於我在頁面加載時不信任該寬度。

找到了解決方案。 我發現最好的方法是循環遍歷元素中的每個節點,如果它是文本節點,則從那里修改文本。 這是要點:

    function insert_breaks(mtext) {
        if (mtext.length <= word_length) {
            return mtext;
        } else {
            mresult = mtext.substr(0, word_length) + " ";
            var newsection = mtext.substr(word_length);
            return mresult + insert_breaks(newsection);
        }               
    }

    function checkTextNodes(node) {
        if (node.nodeType == 3) {
            var v = node.nodeValue;
            var edited = false;
            var words = v.split(" ");
            for (var ii = 0; ii < words.length; ii++) {
                if (words[ii].length > word_length) {
                    edited = true;
                    v = v.replace(words[ii], insert_breaks(words[ii]));
                }
            }       
            if (edited) node.nodeValue = v; 
        } else {
            for (var i = 0; i < node.childNodes.length; i++) {
                checkTextNodes(node.childNodes[i]); 
            }
        }
    }

    function word_break() { 
        $('.post').contents().each(function() {
            checkTextNodes(this);
        });         
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM