Удалить первую строку из текстового блока, если он содержит определенную строку - с помощью jQuery - PullRequest
0 голосов
/ 23 августа 2011

У меня есть таблица с некоторым содержанием. Не все строки имеют одинаковое содержание, но некоторые из них будут иметь первое предложение, например,

Привет, как дела, Джон?

Привет, как ты, Мэри?

Тот же шаблон с другим именем.

Строка будет выглядеть ниже. И содержание в промежутке происходит из базы данных. Да, текст с тегами разрыва также.

<tr style="background-color:#F7F7f7">
<td>
<span id="sp1">Hello How Are you? John <br/><br/>Some text blalablalalbal <br/><br/>"You are Awesome" <br/><br/>----What can I do for you? <br/><br/></span><br />
<span id="sp2">XYZABCD</span><br />
<span id="sp3">12345669060 Some Loren ipsum</span><br />
</td>
</tr>

Я хочу удалить первое предложение из строк, в которых есть Привет, как дела, xyzname? .

Итак, у меня есть следующий код, который работает и делает то, что я хочу:

<script type="text/javascript">
        $(function () {
            $("#btnCleanUp").click(function () {
                $("table tr td").each(function () {
                    var elem = $(this).find('span:contains("Hello How Are you?")');
                    var alltxts = elem.contents().filter(function () {
                        var retm = true;
                        var str = this.nodeValue;
                        if (str != null) {
                            var bstr = str.indexOf("Hello How Are you?");
                            $(this).nodeValue = "";
                            if (bstr >= 0) {
                                retm = false;
                            }
                        }
                        var ret = (this.nodeType == 3) && retm;
                        return ret;
                    });
                    elem.text("");
                    elem.html("<br/>");
                    $(alltxts).each(function () {
                        var hm = $(this);
                        elem.html(elem.html() + hm[0].nodeValue + "<br/><br/>");
                    });
                });
            });
        });
    </script>

Вот пример демо .

Вопрос:

Могу ли я сделать это лучше?

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

Я готов сделать это в C #, если это лучший способ. Пожалуйста, предоставьте образец кода.

Ответы [ 2 ]

1 голос
/ 23 августа 2011
$(function () {
        $("#btnCleanUp").click(function () {
            $("table tr td span").each(function () {
                var data = $(this).html();
                data = data.replace(/^Hello how are you\?.*?(<br ?\/?>){1,2}/i,'');
                $(this).html(data);

            });
        });
    });

См. здесь для демонстрации

Но я не совсем уверен, что JavaScript - лучшее место для этого.

0 голосов
/ 23 августа 2011

Вы можете избавиться от этой $.each петли:

$(function() {
    $("#btnCleanUp").click(function() {
        var elm = $("table tr td").find('span:contains("Hello How Are you?")');
        var alltxts = elm.contents().filter(function() {
            var retm = true;
            var str = this.nodeValue;
            if (str != null) {
                var bstr = str.indexOf("Hello How Are you?");
                $(this).nodeValue = "";
                if (bstr >= 0) {
                    retm = false;
                }
            }
            var ret = (this.nodeType == 3) && retm;
            return ret;
        });
        elm.text("");
        elm.html("<br/>");
        $(alltxts).each(function() {
            var hm = $(this);
            elm.html(elm.html() + hm[0].nodeValue + "<br/><br/>");
        });
    });
});

Скрипка: http://jsfiddle.net/maniator/ZDx4x/12/

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