Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Компактная запись функции (https://javascript.ru/forum/misc/70012-kompaktnaya-zapis-funkcii.html)

AlexTrader 03.08.2017 15:53

Я понимаю, нет предела совершенству, но возможно ли ещё усовершенствовать метод?

ksa 03.08.2017 15:57

Цитата:

Сообщение от AlexTrader
Сделал так

Неужели ты не видишь циклы? :blink: Любое повторение с изменением одного параметра - уже цикл!

ksa 03.08.2017 15:57

Цитата:

Сообщение от AlexTrader
но возможно ли ещё усовершенствовать метод?

Разумеется! :D

j0hnik 03.08.2017 16:04

app.ratingTooltipTpl = function (e) {
        var res = "<div id='set-rating" + e.chainId + "'>";
        var rate = e.rating;
        var spanArr = [];

        for (var i = 1; i <= 5; ++i) {
            spanArr.push("<span rate=" + i + " chainId=" + e.chainId + " class='action-tooltip rating-empty' onclick='setRating(this)'></span>");
        }
        	var a = "empty", b = "yellow-star"
        switch (rate) {
            case 1:
                spanArr[0].replace(a, b);
                break;
            case 2:
                spanArr[0].replace(a, b);
                spanArr[1].replace(a, b);
                break;
            case 3:
                spanArr[0].replace(a, b);
                spanArr[1].replace(a, b);
                spanArr[2].replace(a, b);
                break;
            case 4:
                spanArr[0].replace(a, b);
                spanArr[1].replace(a, b);
                spanArr[2].replace(a, b);
                spanArr[3].replace(a, b);
                break;
            case 5:
                spanArr[0].replace(a, b);
                spanArr[1].replace(a, b);
                spanArr[2].replace(a, b);
                spanArr[3].replace(a, b);
                spanArr[4].replace(a, b);
                break;
        }

        var spans = spanArr.join();
        res += spans;
        res = res + "</div></br>Баллы:<span id='rating-rate" + e.chainId + "'>"+rate+"</span>";
        return res;
    };


смотри сколько буков я тебе сократил! :dance:

ksa 03.08.2017 16:06

Цитата:

Сообщение от j0hnik
смотри сколько буков я тебе сократил!

Мои 5коп...

app.ratingTooltipTpl = function (e) {
        var res = "<div id='set-rating" + e.chainId + "'>";
        var rate = e.rating;
        var spanArr = [];
		var val=" chainId=" + e.chainId + " class='action-tooltip rating-empty' onclick='setRating(this)'></span>";
        for (var i = 0; i < 5; ++i) {
            spanArr[i]="<span rate=" + (i+1) + val;
        }
		for (i=0; i<rate; i++) {
			spanArr[i].replace("empty", "yellow-star");
		}
        var spans = spanArr.join("");
        res += spans;
        res = res + "</div></br>Баллы:<span id='rating-rate" + e.chainId + "'>"+rate+"</span>";
        return res;
    };

Не тестил конечно...

AlexTrader 03.08.2017 16:07

смотри сколько буков я тебе сократил!

Круто конечно, но всё равно портянка...

AlexTrader 03.08.2017 16:13

Есть такой вариант:
app.ratingTooltipTpl = function (e) {
        var div = $("<div></div>").attr({ "id": "set-rating" + e.chainId });
        var starSpan = $("<span></span>").attr({
            "rate": 0,
            "chainId": e.chainId,
            "class": "action-tooltip rating-empty",
            "onclick": "setRating(this)"
        });
        var spanArr = [];
        for (var i = 1; i <= 5; ++i) {
            spanArr.push(starSpan.clone().attr("rate", i));
        }
        var spans = spanArr.join("");
        div.append(spans);


        var rateSpan = $("<span></span>").attr({ "id": "rating-rate" + e.chainId });
        div.append("</br>Баллы:");
        div.append(rateSpan);
        return div;
    };

Но вот это не работает:
var spans = spanArr.join("");
        div.append(spans);

И смены классов нет

ksa 03.08.2017 16:52

Или вообще так...

app.ratingTooltipTpl = function (e) {
	var res = "<div id='set-rating" + e.chainId + "'>";
	for (var i = 0; i < 5; ++i) {
		var cls='rating-'+(i<e.rating)? 'yellow-star': 'empty';
		res+="<span rate=" + (i+1) + " chainId=" + e.chainId + " class='action-tooltip "+cls+"' onclick='setRating(this)'></span>";
	};
	res +="</div></br>Баллы:<span id='rating-rate" + e.chainId + "'>"+e.rating+"</span>";
	return res;
};

AlexTrader 03.08.2017 17:05

ksa,
Немного подправил, спасибо, работает!
app.ratingTooltipTpl = function (e) {
        var res = "<div id='set-rating" + e.chainId + "' class='set-rating'>";
        for (var i = 0; i < 5; ++i) {
            var cls = 'rating-' + ((i < e.rating) ? 'yellow-star' : 'empty');
            res += "<span rate=" + (i + 1) + " chainId=" + e.chainId + " class='action-tooltip " + cls + "' onclick='setRating(this)'></span>";
        };
        res += "</div></br>Баллы:<span id='rating-rate" + e.chainId + "'>" + e.rating + "</span>";
        return res;
    };

AlexTrader 03.08.2017 17:15

ksa,
А такой вариант возможно доработать?
app.ratingTooltipTpl = function(e) {
        var div = $("<div></div>").attr({ "id": "set-rating" + e.chainId, "class": "set-rating" });
        var starSpan = $("<span></span>").attr({
            "rate": 0,
            "chainId": e.chainId,
            "class": "rating-empty",
            "onclick": "setRating(this)"
        });

        for (var i = 1; i <= 5; ++i) {
            var span = starSpan.clone();
            span.attr("rate", i);
            span.attr("class", "rating-" + ((i < e.rating) ? "yellow-star" : "empty"));
            div.append(span);
        }

        var rateSpan = $("<span></span>").attr({ "id": "rating-rate" + e.chainId });
        div.append("</br>Баллы:");
        div.append(rateSpan);
        return div;
    }


Часовой пояс GMT +3, время: 10:25.