抓取表数据并使用jQuery转换为无序列表
Scrape Table Data and convert to an Unordered List with jQuery
>我有一个无法自定义的 SharePoint Web 部件 - 它在到达实际数据表之前生成大量表。
我想使用 jQuery 从每个单元格中抓取数据,并使用带有类的跨度将其添加到列表项中,以便将其样式设置为不是真正的表格数据,但这就是 sharepoint 为我页面中需要的变量提供值的方式;我需要对每一行重复此操作以创建多个列表项。
我观察到数据以 4 个表开头 - 我知道很疯狂,但这就是 MS 布局组件的方式,所以我的目标类似于:
$('table table table table tr td').html();
我想生成一个结构列表:
<ul>
<li>
<span class="name">Name</span>
<span class="points">Points</span>
</li>
<li>...
</ul>
呈现的 SharePoint 表是(忽略外部表)的格式如下,我在 Web 部件周围包装一个带有唯一 ID 的 DIV,以帮助确定目标
<div id="uniqueID">
<table>
<tr>
<td>John Doe</td>
<td>50</td>
</tr>
</table>
</div>
希望有人可以帮助如何将其转换为格式化列表
谢谢
如果我理解正确,那么$('table table table table tr td').html()
会返回您<div id="uniqueID">...</div>
部分。
如果这是正确的,那么您可以使用jquery的map()函数循环访问原始节点并返回新节点数组。我不知道您确切地从哪个容器获得原始列表,所以我在原始查询中添加了一个占位符 PARENTNODE,您需要对其进行修改。
var ul = $('<ul/>');
var originalItems = $('table table table table tr td', PARENTNODE);
var items = $.map( originalItems, function(i,node){
var dataCells = $(node).find('table tr td'),
li = $('<li/>');
li.append( '<span class="name">'+ dataCells.eq(0).text()+'</span>' );
li.append( '<span class="points">'+ dataCells.eq(1).text()+'</span>' );
return li;
});
ul.append( items );
当然,您可以通过将地图放入附加项中来使其缩短一点:
...
ul.append( $.map( ... ) )
<!DOCTYPE html>
<html lang="en">
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.0/jquery.min.js"></script>
</head>
<body>
<div id="uniqueID">
<table>
<tr>
<td>John Doe</td>
<td>50</td>
</tr>
<tr>
<td>John Doe1</td>
<td>500</td>
</tr>
</table>
</div>
<div id="list">
</div>
</body>
<script type="text/javascript">
$(document).ready(function () {
var str = "<ul>";
$('tr').each(function (index, responce) {
str += "<li> <span class='"name'">" + $($($(this).children())[0]).text() + "</span><span class='"points'">" + $($($(this).children())[1]).text() + "</span></li>";
});
str += "</ul>";
$('#list').html(str);
});
</script>
</html>
2010 的 JavaScript 客户端对象模型从 JavaScript 访问 SharePoint 列表/库数据,而无需分析呈现的 HTML。
在 SharePoint 2010 中,要在页面上运行一些 JavaScript(而不弄乱 SharePoint Designer 或 Visual Studio),您可以:
- 将 HTML 和 JavaScript 的组合放在文本文件中
- 将文本文件保存到网站上的文档库中
- 将内容编辑器 Web 部件添加到希望在其中显示/执行 HTML/JavaScript 的页面
- 编辑 Web 部件的属性
- 在"内容链接"属性中,可以粘贴文本文件的路径
然后,嵌入式 JavaScript 将在该 Web 部件加载时运行,HTML 将显示在放置它的任何位置。(请注意,SharePoint 2013 引入了脚本编辑器 Web 部件,从而在一定程度上简化了此过程。
作为 JavaScript 客户端对象模型入门的参考,下面是一个准系统示例:
<ul id="PointList"></ul>
<script>
var pointList = document.getElementById("PointList");
ExecuteOrDelayUntilScriptLoaded(loadListData,"SP.JS");
function loadListData(){
var clientContext = new SP.ClientContext();
// Replace "Example List" with your list's title below:
var list = clientContext.get_web().get_lists().getByTitle("Example List");
var camlQuery = new SP.CamlQuery();
// use a CAML query to retrieve a set of list items:
camlQuery.set_viewXml(
'<View><Query>'+
'<Where>'+
// '<BeginsWith>'+
// '<FieldRef Name=''Title'' /><Value Type=''Text''>A</Value>'+
// '</BeginsWith>'+
'</Where>'+
'<OrderBy>'+
// '<FieldRef Name=''Modified'' />'+
'</OrderBy>'+
'</Query></View>');
var items = list.getItems(camlQuery);
clientContext.load(items);
clientContext.executeQueryAsync(
/* code to run on success: */
Function.createDelegate(this,
function(){
var item, itemEnumerator = items.getEnumerator();
while(itemEnumerator.moveNext()){
item = itemEnumerator.get_current();
// Replace "Title" and "Points" with the
// internal names of your fields below:
addHTML(item.get_item("Title"), item.get_item("Points"));
}
}
),
/* code to run on error: */
Function.createDelegate(this,
function(sender,args){
alert(args.get_message());
}
)
);
}
function addHTML(name, points){
var li = document.createElement("li"),
nameSpan = document.createElement("span"),
pointSpan = document.createElement("span");
pointList.appendChild(li);
li.appendChild(nameSpan);
li.appendChild(pointSpan);
nameSpan.innerHTML = name;
pointSpan.innerHTML = points;
}
</script>
我在 CAML 查询中注释掉了 Where
和 OrderBy
子句的内部元素,以便它只按默认顺序抓取所有内容,但您仍然可以看到常规格式。通过更改该 CAML 查询,可以获取筛选的项目子集和/或按特定顺序获取它们。(有关 CAML 语法的更多详细信息,请查看此答案。
以下是一些来自Microsoft的很好的JavaScript参考资料,以供进一步研究:
- SharePoint 2010 客户端对象模型层次结构和标识
- JavaScript 对象模型中的常见编程任务
- JavaScript 类/命名空间参考
- 如何在JavaScript中将字符串转换为函数引用
- 如何在Javascript中将JSon对象转换为数组
- 使用JS将数组转换为json对象
- 如何使用json将对象列表从java转换为javascript
- 偶尔结结巴巴地说“;堆叠的”;translate()上的转换(v4.0.0-alpha40)
- 为什么在单独的函数中应用时转换会闪烁/断断续续(D3)
- 在Javascript中转换对象数组
- 正在将无序列表转换为选择..但有一个转折
- 抓取表数据并使用jQuery转换为无序列表
- 将逗号分隔列表转换为无序列表
- 如何将无序列表转换为<选择>下拉列表使用jquery
- 生成url's转换为JavaScript中的无序列表
- 如何将无序列表(UL,LI)转换为连续字符串
- Vue.js转换和效果执行无序
- 使用javascript将分层无序列表转换为选择列表
- 将逗号分隔的列表转换为无序列表
- 将无序列表中的多个文本区域转换为LI
- 将非格式良好的XML文档转换为HTML无序列表
- 如何将生成的选择标签转换为无序列表
- 转换无序列表html
- 对json数组递归调用子列表