获取HTML块中最后一段文本的Javascript

获取HTML块中最后一段文本的Javascript,javascript,html,sharepoint,Javascript,Html,Sharepoint,这是相当简单的,我相信,但我有一些麻烦。我正在尝试使用Sharepoint 2013客户端呈现(CSR)来格式化包含一长段文本的Sharepoint字段,以仅显示最后一段(其想法是为报告最后一行条目的任务设置“上次更新状态”) 以这段html为例: <html> <head> <meta name="generator" content="HTML Tidy for HTML5 (experimental) for Windows https:/

这是相当简单的,我相信,但我有一些麻烦。我正在尝试使用Sharepoint 2013客户端呈现(CSR)来格式化包含一长段文本的Sharepoint字段,以仅显示最后一段(其想法是为报告最后一行条目的任务设置“上次更新状态”)

以这段html为例:

<html>
  <head>
    <meta name="generator"
    content="HTML Tidy for HTML5 (experimental) for Windows https://github.com/w3c/tidy-html5/tree/c63cc39" />
    <title></title>
  </head>
  <body>
    <div class="ExternalClass473CC6A801594594826FDFA0BFAD6B1E">
      <p>​</p>
      <p style="margin:0in;font-family:calibri;font-size:14pt;color:#0070c0;">
        <span style="font-weight:bold;text-decoration:underline;">Current Status</span>
        <span style="font-weight:bold;">: Pending</span>
      </p>
      <p style="margin:0in;font-family:calibri;font-size:12pt;">Some update</p>
      <p style="margin:0in;font-family:calibri;font-size:12pt;">Some Update 2</p>
      <p style="margin:0in;font-family:calibri;font-size:12pt;">THIS IS THE TEXT I WANT TO GET
      <br /></p>
      <p>
        <br />
      </p>
    </div>
  </body>
</html>

现状 :待定

一些更新

一些更新2

这是我想要的文本


如何使用正则表达式或javascript html解析器设置变量以包含“这是我想要获取的文本”


提前感谢!:)

您可以完全放弃使用JS,而使用CSS。将此粘贴到您的


p{
显示:无;/*这将隐藏所有p标记*/
}
p:最后一个孩子{
display:inline;/*这将显示最后一个p标记*/
}

您可以完全放弃使用JS,而使用CSS。将此粘贴到您的


p{
显示:无;/*这将隐藏所有p标记*/
}
p:最后一个孩子{
display:inline;/*这将显示最后一个p标记*/
}

如果要分配给变量的
标记具有类似于id的内容,以便JavaScript能够识别它,这将非常方便

如果您这样做了,您只需执行:
var text=document.querySelector(“#id”).value

或者,如果这不是一个选项,您必须自己在
标记中查找它

类似于:
var pTags=document.getElementByTagName(“p”);
var theTextIwant=“”;
对于(var i=0;i)}

如果要分配给变量的
标记具有类似于id的内容,以便JavaScript能够识别它,这将非常方便

如果您这样做了,您只需执行:
var text=document.querySelector(“#id”).value

或者,如果这不是一个选项,您必须自己在
标记中查找它

类似于:
var pTags=document.getElementByTagName(“p”);
var theTextIwant=“”;
对于(var i=0;i)}

这里有一些时髦的正则表达式魔术

document
// Get the parent node
.querySelector('.ExternalClass473CC6A801594594826FDFA0BFAD6B1E') 
// Get the contents as text
.textContent
// Look for any character, then match all the way until there's a linebreak or its the end of the string. 
.match(/\w.+(\n|$)/g)
// Get the last matching item
.slice(-1)

这里有一些时髦的regex魔术

document
// Get the parent node
.querySelector('.ExternalClass473CC6A801594594826FDFA0BFAD6B1E') 
// Get the contents as text
.textContent
// Look for any character, then match all the way until there's a linebreak or its the end of the string. 
.match(/\w.+(\n|$)/g)
// Get the last matching item
.slice(-1)
“最后一段”是指最后一个“p”元素吗?若然,原因为何:

<script type="text/javascript">
  window.onload = function() {
    target = document.getElementsByTagName("p")[-1];
    content = target.innerText || target.textContent;
  };
</script>

window.onload=函数(){
target=document.getElementsByTagName(“p”)[-1];
content=target.innerText | | target.textContent;
};
在jQuery中:

<script type="text/javascript">
  jQuery(document).ready(function() {
    target = $("p").last();
    content = target.html();
  });
</script>

jQuery(文档).ready(函数(){
target=$(“p”).last();
content=target.html();
});
通过“最后一个段落块”您是指最后一个“p”元素吗?若然,原因为何:

<script type="text/javascript">
  window.onload = function() {
    target = document.getElementsByTagName("p")[-1];
    content = target.innerText || target.textContent;
  };
</script>

window.onload=函数(){
target=document.getElementsByTagName(“p”)[-1];
content=target.innerText | | target.textContent;
};
在jQuery中:

<script type="text/javascript">
  jQuery(document).ready(function() {
    target = $("p").last();
    content = target.html();
  });
</script>

jQuery(文档).ready(函数(){
target=$(“p”).last();
content=target.html();
});

好的,我花了最后一天的时间在这上面,但看起来最简单、最简单的方法是:

var bodyElements = doc.querySelectorAll("p");

//Find the last non-empty element
//TODO: Go back and try another element if all elements of the specified type are empty
var i = bodyElements.length;
var newBodyValue = "";
while (!(/\S/).test(newBodyValue) || i < 0) {
    i--;
    try {
        newBodyValue = bodyElements[i].innerText;
        if (!newBodyValue) {continue;}
    } catch (err) {
        continue;
    }
}
var bodyElements=doc.querySelectorAll(“p”);
//查找最后一个非空元素
//TODO:如果指定类型的所有元素都为空,请返回并尝试其他元素
var i=bodyElements.length;
var newBodyValue=“”;
while(!(/\S/).test(newBodyValue)| i<0){
我--;
试一试{
newBodyValue=bodyElements[i].innerText;
如果(!newBodyValue){continue;}
}捕捉(错误){
继续;
}
}
最后一个子选择器不起作用,因为我需要最后一个非空元素周期,而不仅仅是每个层次结构的最后一个。后来我了解到我可以很容易地使用JQuery来实现这一点,但我试图保持它的纯粹性,以使Sharepoint开销最小化

我不得不添加一些额外的东西,但这里是CSR JSLink的最终结果。它采用标准的Sharepoint任务列表并修改“描述”字段,以便仅显示输入的最后一行内容。这对于我希望信息尽可能紧凑的特定摘要视图非常有用

谢谢大家的建议


我知道我可能在很多事情上没有遵循最佳实践,但我总共只使用了大约10个小时的Javascript,所以起诉我:)

好吧,所以我花了最后一天的时间来做这件事,但看起来最简单、最简单的事情是:

var bodyElements = doc.querySelectorAll("p");

//Find the last non-empty element
//TODO: Go back and try another element if all elements of the specified type are empty
var i = bodyElements.length;
var newBodyValue = "";
while (!(/\S/).test(newBodyValue) || i < 0) {
    i--;
    try {
        newBodyValue = bodyElements[i].innerText;
        if (!newBodyValue) {continue;}
    } catch (err) {
        continue;
    }
}
var bodyElements=doc.querySelectorAll(“p”);
//查找最后一个非空元素
//TODO:如果指定类型的所有元素都为空,请返回并尝试其他元素
var i=bodyElements.length;
var newBodyValue=“”;
while(!(/\S/).test(newBodyValue)| i<0){
我--;
试一试{
newBodyValue=bodyElements[i].innerText;
如果(!newBodyValue){continue;}
}捕捉(错误){
继续;
}
}
最后一个子选择器不起作用,因为我需要最后一个非空元素周期,而不仅仅是每个层次结构的最后一个。后来我了解到我可以很容易地使用JQuery来实现这一点,但我试图保持它的纯粹性,以使Sharepoint开销最小化

我不得不添加一些额外的东西,但这里是CSR JSLink的最终结果。它采用标准的Sharepoint任务列表,并修改“描述”字段,以便