JS - 随机按比例给英文句子字母添加下划线

    var rate =0.5; //默认下划线比例为0.5

    function getRate(str,rate) {
        var str;
        this.str = str;
        this.rate = rate;
        console.log( this.str, this.rate )
        var arr = str.split("");
        var arr_len = Math.ceil(arr.length * rate);
        var my_array = getRandomArrayElements(arr, arr_len);
        for (var j in my_array) {
            if (!isEmpty(arr[j])) {
                arr[j] = "<u>" + arr[j] + "</u>";
            }
        }
        function getRandomArrayElements(arr, count) {
            var shuffled = arr.slice(0),
                    arr_len = arr.length,
                    temp,
                    index;
            var newArr = [];
            var index_arr = [];

            // console.log('min:' + count)
            for (i = 0; i < count; i++) {
                index = getRandomIndex('', index_arr, arr_len);
                temp = shuffled[index];
                newArr[index] = temp;
            }
            return newArr;
        }

        function getRandomIndex(index, indexArr, arr_len) {
            index = Math.floor((arr_len) * Math.random());
            if (checkArrIn(index, indexArr)) {
                return getRandomIndex('', indexArr, arr_len);
            } else {
                indexArr.push(index);
            }
            return index;
        }

        function isEmpty(obj) {
            if (obj === null) return true;
            if (typeof obj === 'undefined') {
                return true;
            }
            if (typeof obj === 'string') {
                if (obj === "") {
                    return true;
                }
                var reg = new RegExp(/[(\ )(\~)(\!)(\@)(\#)(\$)(\%)(\^)(\&)(\*)(\()(\))(\-)(\_)(\+)(\=)(\[)(\])(\{)(\})(\|)(\\)(\;)(\:)(\')(\")(\,)(\.)(\/)(\<)(\>)(\?)(\)]+/);
                // console.log(reg.test(obj))
                return reg.test(obj);
            }
            return false;
        }

        function checkArrIn(rand, array) {
            if (array.indexOf(rand) > -1) {
                return true
            }
            return false;
        }

        return document.write(arr.join(''));
    }

指定比例方法:

   function showUnderLine(rate) {
        var items = $(" .rateitem");
        for (var i = 0; i < items.length; i++) {
            var text = $(items[i]).text();
            $(items[i]).text('');
            $(items[i]).append(getRate(text, rate));
        }
    }   showUnderLine(0.5);// 默认添加 50%的下划线


 $(".set-rate").click(function() {
        var _this = $(this);
        if (_this.hasClass("set-choice")) {
            _this.siblings().removeClass("set-choice");
        } else {
            _this.addClass("set-choice");
            _this.siblings().removeClass("set-choice");
        }

        // 获取当前元素的私有属性,然后赋值
        showUnderLine(_this.attr('data-rate'))

 });

HTML:

 <div class="set-rate rate-10" data-rate="0.1">
 <p>10%</p>  </div>
<div class="set-rate rate-30" data-rate="0.3">
<p>30%</p> </div>
 <div class="set-rate set-choice rate-50" data-rate="0.5">
 <p>50%</p> </div>
<div class="set-rate rate-70" data-rate="0.7">
<p>70%</p> </div>
<div class="set-rate rate-90" data-rate="0.9">
<p>90%</p> </div>
 <div class="set-rate rate-100" data-rate="1">
<p>100%</p> </div>

效果如下:
这里写图片描述
*完整代码如下,可直接运行:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
</head>
<style>
    u{
        color: red;
    }
</style>
<script>

//--------------------------------- 一词多空
function getRate(str, rate) {
        var str;
        this.str = str;
        this.rate = rate;
        console.log(this.str, this.rate)
        var arr = str.split("");
        var arr_len = Math.ceil(arr.length * rate);
        var my_array = getRandomArrayElements(arr, arr_len);

        for (var j in my_array) {
            if (!isEmpty(arr[j])) {
                arr[j] = "<u>" + arr[j] + "</u>";
            }
        }

        function getRandomArrayElements(arr, count) {
            var shuffled = arr.slice(0),
                    arr_len = arr.length,
                    temp,
                    index;
            var newArr = [];
            var index_arr = [];
            // console.log('min:' + count)
            for (i = 0; i < count; i++) {
                index = getRandomIndex('', index_arr, arr_len);
                temp = shuffled[index];
                newArr[index] = temp;
            }
            return newArr;
        }

        function getRandomIndex(index, indexArr, arr_len) {
            index = Math.floor((arr_len) * Math.random());
            if (checkArrIn(index, indexArr)) {
                return getRandomIndex('', indexArr, arr_len);
            } else {
                indexArr.push(index);
            }
            return index;
        }

        function isEmpty(obj) {
            if (obj === null) return true;
            if (typeof obj === 'undefined') {
                return true;
            }
            if (typeof obj === 'string') {
                if (obj === "") {
                    return true;
                }
                var reg = new RegExp(/[(\ )(\~)(\!)(\@)(\#)(\$)(\%)(\^)(\&)(\*)(\()(\))(\-)(\_)(\+)(\=)(\[)(\])(\{)(\})(\|)(\\)(\;)(\:)(\')(\")(\,)(\.)(\/)(\<)(\>)(\?)(\)]+/);
                // console.log(reg.test(obj))
                return reg.test(obj);
            }
            return false;
        }

        function checkArrIn(rand, array) {
            if (array.indexOf(rand) > -1) {
                return true
            }
            return false;
        }

        return arr.join('');
    }

//--------------------------------- 一词一空
function getword(str, rate) {
    var str;
    this.str = str;
    this.rate = rate;
    console.log(this.str, this.rate)
   var arr =  str.split(/\s+/);//返回单词数组
    // var arr =str.match(/\b\w+\b/g); //除去标点后单个单个英文单词
   var arr_len =  Math.ceil(arr.length * rate); //单词总长度*rate
    var my_array = getRandomArrayElements(arr, arr_len);

    for (var j in my_array) {
        if (!isEmpty(arr[j])) {
            arr[j] = "<u>" + arr[j] + "</u>";
        }
    }

    function getRandomArrayElements(arr, count) {
        var shuffled = arr.slice(0),
                arr_len = arr.length,
                temp,
                index;
        var newArr = [];
        var index_arr = [];
//         console.log('min:' + count)
       for (i = 0; i < count; i++) {
            index = getRandomIndex('', index_arr, arr_len);
            temp = shuffled[index];
            newArr[index] = temp;
        }
        return newArr;
    }

    function getRandomIndex(index, indexArr, arr_len) {
        index = Math.floor((arr_len) * Math.random());
        if (checkArrIn(index, indexArr)) {
            return getRandomIndex('', indexArr, arr_len);
        } else {
            indexArr.push(index);
        }
        return index;
    }

    function isEmpty(obj) {
        if (obj === null) return true;
        if (typeof obj === 'undefined') {
            return true;
        }
        if (typeof obj === 'string') {
            if (obj === "") {
                return true;
            }
            var reg = new RegExp(/[(\ )(\~)(\!)(\@)(\#)(\$)(\%)(\^)(\&)(\*)(\()(\))(\-)(\_)(\+)(\=)(\[)(\])(\{)(\})(\|)(\\)(\;)(\:)(\")(\,)(\.)(\/)(\<)(\>)(\?)(\)]+/);
           // console.log(reg.test(obj))
            return reg.test(obj);
        }
        return false;
    }

    function checkArrIn(rand, array) {
        if (array.indexOf(rand) > -1) {
            return true
        }
        return false;
    }

    return arr.join(' ');
}


var str1 = "I'm Jamie . How can I help you ?";

document.write ("英文语句"+"<br/>"+str1+"<br/>"+"<br/>");
document.write( "一词多空,rate=1"+"<br/>"+getRate(str1, 1)+"<br/>"+"<br/>");
document.write( "一词多空,rate=0.5"+"<br/>"+getRate(str1, 0.5)+"<br/>"+"<br/>");
document.write ("一词一空,rate=1"+"<br/>"+getword(str1,1)+"<br/>"+"<br/>");
document.write ("一词一空,rate=0.5"+"<br/>"+getword(str1,0.5)+"<br/>"+"<br/>");
</script>


</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值