nastya_zholudeva
@nastya_zholudeva

Как заставить jQuery обрезать и/или заменять текст внутри div только после того, как Vue js построил DOM?

Есть код, написанный на jQuery.
$(document).ready(function(){
        _this = this;
        $.each($('.goodsDetail'), function() {
            if($(this).html().length >= 87) {
                $(this).html($(this).html().slice(0, 87) + ' ...');
            }
        });
    });


    $(document).ready(function(){
        _this = this;
        $.each($('.goodsPrice'), function() {
            console.log($(this).text());
            $(this).html($(this).html().replace(/\.(\d+)/gi, '<sup>$1</sup>'));

        });
    });


После того, как страница загрузилась первый раз, он нормально работает. Но после того, как у меня выбраны чекбоксы, при этом идет новый запрос к API, jQuery код не заменяет и не обрезает текст, как должен. Вместо этого он просто оставляет тот текст, который был до выбора чекбоксов.

Как можно это победить?

P. S. Я знаю, что jQuery и Vue не "дружат" друг с другом. Но как такие вещи сделать только с помощью Vue я не знаю
  • Вопрос задан
  • 315 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега Vue.js
Раз используете Vue - вам тут jQuery не нужен.

В первом случае можно применить фильтры:

<div>{{ someStringValue | limit(10) }}</div>

filters: {
  limit(str, limit) {
    return str.length > limit ? str.slice(0, limit) + '...' : str;
  }
}

Во втором - v-html:

<div v-html="sup(someStringValue)"></div>

methods: {
  sup(val) {
    return val.replace(/\.(\d+)/g, '<sup>$1</sup>');
  }
}

https://jsfiddle.net/5bjt71g2/
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы