如何用JavaScript获取SharePoint多行列COL的值?解决undefined问题
首先,你的代码返回undefined的原因很明确:SharePoint的多行文本字段在表单中对应的HTML元素是<textarea>,而不是<input>,而且表单控件的值应该用.val()获取,不是.text()。
快速修复你的代码
把原来的代码改成这样就能拿到值了:
var res = $('textarea[title="COL"]').val(); console.log(res);
- 用
textarea代替input选择器,匹配到正确的元素 - 用
.val()获取表单控件的输入值(.text()是用来获取标签内的静态文本,不适合表单控件场景)
通用的SharePoint多行文本列值获取方法
根据不同的使用场景(表单、列表视图、代码直接读取),有不同的可靠实现方式:
1. 在New/Edit/Display表单中获取
jQuery方式
如果列的显示名是COL,直接匹配textarea的title属性即可:
// 注意:如果列名包含空格,title可能会显示为"列名 (多行文本)",需要检查页面元素确认 var multiLineVal = $('textarea[title="COL"]').val();
原生JavaScript方式
不用jQuery的话,用原生DOM选择器也能实现:
var textareaEl = document.querySelector('textarea[title="COL"]'); var multiLineVal = textareaEl ? textareaEl.value : '';
2. 在列表视图中获取多行文本列值
列表视图里的多行文本通常渲染在<td>或<div>中,你可以通过列的索引或者内部名来定位:
// 假设COL是第3列(索引从0开始计数) var targetRow = $('tr.ms-itmhover:first'); // 获取列表第一行数据 var multiLineVal = targetRow.find('td:nth-child(3)').text().trim();
3. 用SharePoint客户端对象模型(CSOM)获取(最可靠)
如果需要从代码中直接读取列表项的多行列值,推荐用CSOM,这种方式不受页面HTML结构变化影响:
// 初始化客户端上下文 var clientContext = new SP.ClientContext.get_current(); // 获取目标列表(替换成你的列表名称) var targetList = clientContext.get_web().get_lists().getByTitle('你的列表名称'); // 获取指定ID的列表项(替换成你要读取的列表项ID) var listItem = targetList.getItemById(1); // 加载列表项数据 clientContext.load(listItem); // 执行查询并处理结果 clientContext.executeQueryAsync( function() { // 这里要用列的内部名称,不是显示名! var multiLineValue = listItem.get_item('COL'); console.log('多行列值:', multiLineValue); }, function(sender, args) { console.error('获取失败:', args.get_message()); } );
小提示:列的内部名称可以通过列表设置中列的URL查看,比如URL里的
Field=COL后面的就是内部名,如果列名包含空格,内部名会是类似COL_x0020_Name的格式。
内容的提问来源于stack exchange,提问作者sweta Nayak
相关产品推荐
相关产品推荐

