Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Плагин обрезающий текст для jQuery (https://javascript.ru/forum/project/21063-plagin-obrezayushhijj-tekst-dlya-jquery.html)

Gozar 27.08.2011 12:31

применение плагина?

devote 27.08.2011 12:33

а этот кусок можно вообще удалить:
if ( self.className.indexOf('fixline_') >= 0 ) { 
            classes = self.className.split(" "); 
            for( i = 0; i < classes.length; i++ ) { 
                if ( classes[ i ].indexOf('fixline_') >= 0) { 
                    temp = classes[ i ].split("_"); 
                    maxLine = parseInt( temp[1] ); 
                    break; 
                } 
            } 
        }
Он нужен для того что бы можно было указать класс у элемента с числом строк, типо универсал и все такое... ну пример у меня стоит так:
<div class="correct_comment">

а можно так:
<div class="correct_comment fixline_2">

и тогда приоритет будет не первый параметр у функции, а то число что стоит после fixline_

melky 27.08.2011 12:34

devote, я думал, плагины для jQuery пишутся на jQuery ;)

ну там всякие hasClass, $.each, фишки да цепочки вызовов

devote 27.08.2011 12:38

Цитата:

Сообщение от Gozar
применение плагина?

все очень просто:
смотрим первый пост

devote 27.08.2011 12:39

Цитата:

Сообщение от melky (Сообщение 122870)
devote, я думал, плагины для jQuery пишутся на jQuery ;)

ну там всякие hasClass, $.each, фишки да цепочки вызовов

Да тупая привычка писать на чистом js, никак не могу привыкнуть к тому что это jQuery :D

devote 27.08.2011 13:40

Вот немного его уменьшил:
смотрим первый пост

melky 27.08.2011 14:06

еще парочку подкину идей для сжатия кода.

jQuery.fn.correctLines = function( maxLine, moreText ) {

		var self = this[ 0 ], temp, classes, i, lineHeight, 
*!*
               $ = jQuery;
*/!*

.....
lineHeight.toString().indexOf("px") > 0

~(lineHeight+'').indexOf("px")

....
clone.html('');
jQuery( document.body ).append( clone );

jQuery( document.body ).append(  clone.empty() );

....
for( i = 0; i < txt.length; i++ ) {

			clone[0].innerHTML += txt[ i ] + ' ';

			if ( clone[0].offsetHeight > lastHeight ) {
				if ( lastHeight == 0 ) {
					height = clone[0].offsetHeight;
				}
				startWord = endWord + 1;
				endWord = i - 1;
				lines++;
				lastHeight = clone[0].offsetHeight;
			}

			if ( lines > maxLine ) {
				break;
			}
		}


jQuery.each :
Цитата:

We can break the $.each() loop at a particular iteration by making the callback function return false. Returning non-false is the same as a continue statement in a for loop; it will skip immediately to the next iteration.
$.each(txt, function(i, a) {

    clone[0].innerHTML += a + ' ';

    if (clone[0].offsetHeight > lastHeight) {

        if (lastHeight == 0) {
            height = clone[0].offsetHeight;
        }

        startWord = endWord + 1;
        endWord = i - 1;
        lastHeight = clone[0].offsetHeight;
    }

    if ( ++lines > maxLine) return false;
});

...
this.css({
*!*
    height: lines > maxLine ? (lineHeight * maxLine) + "px" *!*: "auto"*/!*,
*/!*
    overflowY: 'hidden'
});

?????

.....
for( i = startWord; i <= endWord; i++ ) {
			part.push( txt[ i ] );
		}

		for( i = part.length - 1; i >= 0; i-- ) {

			clone.html( part.join(' ') + moreText );

			if ( clone[0].offsetHeight > height ) {
				part.splice( i, 1 );
				endWord--;
			} else {
				break;
			}
		}

не удумал, как заменить, но повторябщиеся операции всегда надо заменять

devote 27.08.2011 14:11

Цитата:

Сообщение от melky
еще парочку подкину идей для сжатия кода.

Да привычка у мну писать на чистом JS от того и джуквери не особо люблю, пишу тока на нем когда надо чето по бырому. А этот плуг и есть бобырому =) Но замечания справедливы не спорю.

devote 27.08.2011 15:36

Внес изменения в первый пост, с замечаниями от melky, кроме конечно .each() она мне не катит, там у мну break стоит, а этот .each() на это не предусмотрен.

melky 27.08.2011 16:01

я там дал выдержку из документации и подчеркнул кой чего :)


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