我有一张表中有一些内容。并非所有行都具有相同的内容,但其中一些行将具有第一个句子,例如。
你好,你好吗约翰?
你好,你好吗玛丽?
具有不同名称的相同模式。
该行将如下所示。而跨度中的内容来自数据库。是带有中断标签的文本。
<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的行中删除第一句话,你怎么用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#中这样做。请提供示例代码。
答案 0 :(得分: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是最好的地方。
答案 1 :(得分:0)
你可以摆脱那个$.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/>");
});
});
});