текстовое приложение javascript - PullRequest
4 голосов
/ 25 октября 2011

Я не знаю, как это описать, но я уверен, что вы поймете, если перейдете по этой ссылке. http://jsfiddle.net/pahnin/yN3xf/

Я хочу добавить текст к элементу p с помощью javascript, и мне это удалось, но если текст содержит тег типа <font>, тег отображается как есть.

Должен ли я добавить код для обнаружения html-элементов или это можно сделать любым другим способом? если я добавлю код, который обнаружит тег шрифта, как добавить тег обратно в текст ??

Ответы [ 4 ]

4 голосов
/ 25 октября 2011

Вы можете просто заменить var textcopied = $('.welcome').html(); на var textcopied = $('.welcome').text();, чтобы извлечь текст без каких-либо тегов HTML.Но тогда, конечно, вы вообще не вернете свои теги.

Обновление: В несколько ином подходе используются анимации jQuery для плавного перемещения всего заголовка:

$(document).ready(function(){
    var $title = $('.welcome');
    var twidth = $title.width();
    var theight = $title.height();
    $title.css({
        overflow: 'hidden',
        width: 0,
        whiteSpace: 'nowrap',
        height: theight
    }).animate({
        width: twidth 
    }, 5000); // milliseconds
});

http://jsfiddle.net/mblase75/yN3xf/16/

3 голосов
/ 25 октября 2011

Вы могли бы сделать что-то вроде этого.Как только весь текст был выписан, вы заменяете весь HTML-код welcome исходным текстом.Это не лучшее, что я признаю.

http://jsfiddle.net/yN3xf/13/

$(document).ready(function() {
    var htmlcopied = $('.welcome').html();
    var textcopied = $('.welcome').text();
    $('.welcome').text('');

    function foobar(i) {
        if (i < textcopied.length) {
            $('.welcome').append(textcopied.charAt(i));
            setTimeout(function() {
                foobar(i + 1);
            }, 80);
        }
        else {
            $('.welcome').html(htmlcopied);
        }
    }
    foobar(0);
});



ОБНОВЛЕНИЕ

Это должно дать вам желаемоеэффект через разные средства.У него есть div поверх исходного текста, и он медленно показывает текст, который выглядит так, как будто он набирается.

Пример

http://jsfiddle.net/guanome/LrbVy/

html

<div class="welcome">Hi, there <span class="hl">special text</span>, normal text
    <div class="overlay"></div>
</div>

javascript

$(document).ready(function() {
    $('.overlay').css('width', $('div.welcome').css('width'));
    $('.overlay').css('height', $('div.welcome').css('height') + 15);
    var origWidth = $('.overlay').css('width').replace(/px/g,'');
    foobar(origWidth);
});

function foobar(i) {
    if (i > -10) {
        $('.overlay').css('width', i);
        setTimeout(function() {
            foobar(i - 10);
        }, 80);
    }
}

css

.hl{
    color: red;     font-family: helvetica; 
    background: #efefef; 
    color: black; 
    padding: 2px 7px; 
    -moz-box-shadow: 0 1px 1px #CCCCCC; 
    -webkit-box-shadow: 0 1px 1px #CCCCCC; 
    box-shadow: 0 1px 1px #CCCCCC;

}
div.welcome
{
    position: relative;
    width: 500px;
}
.overlay
{
    position: absolute;
    right: 0;
    top: -3px;
    width: 100%;
    height: 25px;
    background-color: #FFF;
    z-index: 10;
}

UPDATE 2

С этим изменением наложение будетдобавляется динамически к приветственному сообщению, ширина не должна быть задана, и она будет легко работать с несколькими строками.

http://jsfiddle.net/guanome/LrbVy/4/

html

<div class="welcome">Hi, there <span class="hl">special text</span>, normal text</div>

JavaScript

$(document).ready(function() {
    showWelcome();
});

function foobar(i, overlay) {
    if (i > -10) {
        overlay.css('width', i);
        setTimeout(function() {
            foobar(i - 10, overlay);
        }, 80);
    }
    else {
        overlay.remove();
    }
}

function showWelcome() {
    var welcome = $('div.welcome');
    welcome.append('<div class="overlay"></div>');
    welcome.css('position', 'relative');
    var overlay = $('.overlay');

    overlay.css({
        'width': welcome.css('width'),
        'height': (welcome.outerHeight() + 5),
        'position': 'absolute',
        'right': '0',
        'top': '-3px',
        'background-color': '#FFF',
        'z-index': '10'
    });
    var origWidth = overlay.css('width').replace(/px/g, '');
    foobar(origWidth, overlay);
}
1 голос
/ 25 октября 2011

Этого также можно добиться, перебирая корневой элемент contents() и выводя по отдельности каждый из дочерних узлов, один за другим.

При обработке каждого из contents элементов, если это текстовый узел, достаточно вывести все символы с тайм-аутом.Если это не текстовый узел, клонируйте узел и добавьте его к целевому элементу.Все символы внутри него могут быть добавлены одинаково.

Посмотрите, как это работает здесь: http://jsfiddle.net/yN3xf/36/

$(document).ready(function(){

    var $clonedContent = $('.welcome').clone();
    $('.welcome').textContent = '';
    $('.welcome').text('');

    treatContents(0, $clonedContent, $('.welcome'));

    function treatContents(num, container, target){
        var $originalNode = container.contents()[num];
        var $targetNode;
        if ($originalNode.nodeType == 3){
            $targetNode = target;
        }
        else{
            $targetNode = $(container.contents()[num]).clone(false, false).appendTo(target);
            $targetNode.text('');
        }
        $targetNode.textContent = '';
        writeCharacters($originalNode.textContent , 0, $targetNode, num, container, target);
    }

    function writeCharacters(origText, x, target, contNum, contCont, contTarg) {
        if(x<origText.length){
           target.append(origText.charAt(x));
            setTimeout(function() { writeCharacters(origText, x+1, target, contNum, contCont, contTarg); }, 80);
        }
        else{
            treatContents(contNum+1, contCont, contTarg);
        }
    }
});

Этот пример может быть адаптирован для разрешения вложенных тегов, например:

<p class="welcome">Hi, there <b>bold text <i>bold italic text</i></b>, normal text</p>
0 голосов
/ 25 октября 2011

Попробуйте заменить:

$('.welcome').append(textcopied.charAt(i));

с:

textHTML += textcopied.charAt(i);
$('.welcome').html(textHTML);

И в начале кода поместите это:

var textHTML  = '';

Это работает, но выглядит не очень хорошо: P

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...