【问题标题】:Remove first line from a Text block if it contains a specific string - using jQuery如果文本块包含特定字符串,则从文本块中删除第一行 - 使用 jQuery
【发布时间】:2011-08-23 17:00:34
【问题描述】:

我有一个表格,里面有一些内容。并非所有行都具有相同的内容,但其中一些行的第一句例如

你好,约翰你好吗?

你好,玛丽你好吗?

相同的模式具有不同的名称。

该行将如下所示。跨度中的内容来自数据库。是的,带有中断标签的文本也是如此。

<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>

我想从具有 Hello, how are you 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>

这里是示例demo

问题:

我能以更好的方式做到这一点吗?

如果可能的话,我想简化上面的代码块,我的意思是逻辑上,因为我认为考虑到 jquery 的潜力,它可以以更好的方式完成。

如果这是更好的方法,我愿意在 C# 中执行此操作。请提供示例代码。

【问题讨论】:

  • 考虑将其移至 (codereview.stackexchange.com)。
  • @maerics:正确,codereview 也是发布这个问题的地方,但我觉得这个地方仍然很重要。实际上我昨天本来打算发布这个问题以获得解决方案,但我发现这种奇怪的方式让我不满意。所以我把我的工作放在这里。我可以简单地删除我的代码并请求社区为我提供此问题的解决方案。

标签: c# javascript jquery regex dom


【解决方案1】:
$(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);

            });
        });
    });

查看here 进行演示

但我不确定 JavaScript 是否是执行此操作的最佳场所。

【讨论】:

  • 谢谢。我会测试一下。如果这是一个更好的方法,我愿意在服务器端这样做。你能提供用 C# 做这件事的示例代码吗?
【解决方案2】:

你可以摆脱 $.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/

【讨论】:

  • 只是删除每个行为异常。然后我将不得不修改其余的逻辑。
猜你喜欢
  • 2014-08-11
  • 1970-01-01
  • 2018-06-28
  • 1970-01-01
  • 1970-01-01
  • 2022-08-02
  • 2020-01-03
  • 2021-12-05
相关资源
最近更新 更多