摘要:
相信很多朋友都遇到过需要将某个People类型的字段值设置为当前登录用户的情况而且已经给出了解决方案,因此本文没有什么新意,算法上也比较冗余,仅仅在博客里算作知识的备份。
思路:
在画面的右上角有一个欢迎控件,现实内容为“Welcome, 登陆用户名”,我们的代码就是要把这个用户名取出来,然后取到PeoplePicker字段对应的DIV,调用innerHTML属性来进行值得设置。
步骤:
第一步,取得登陆用户,通过Welcome来查找:
function getCurrentUser()
{ var tags = document.getElementsByTagName('a'); for (var i=0; i < tags.length; i++) { if(tags[i].innerText.substr(0,7) == 'Welcome') { return tags[i].innerText.substr(8,tags[i].innerText.length); } }
}
第二步,查找PeoplePicker字段对应的DIV,一层一层往里追溯,算法并不好,最后break后还会继续循环,虽然对最终结果没什么影响,但不是什么好算法,有兴趣的朋友发现好的算法或者通过JQuery可以查到的算法欢迎共享!
function getPickerInputElement(fieldsInternalName)
{ var result = ""; var divs = document.getElementsByTagName("DIV"); for(var i=0; i < divs.length ; i++) { if(divs[i].id=="WebPartWPQ2") { var tds = divs[i].getElementsByTagName("TD"); for(var j=0; j < tds.length; j++) { var cellHTML = tds[j].innerHTML; if(cellHTML.indexOf('FieldInternalName="' + fieldsInternalName + '"') >= 0) { var innerDivs = tds[j].getElementsByTagName("DIV"); for(var k=0; k < innerDivs .length; k++) { if(innerDivs[k].id.indexOf("UserField_upLevelDiv") > 0) { result = innerDivs[k]; break; } } } } } } return result;
}
第三步,设置值,我们通过一个叫做fillPeoplePickerWithCurrentUser的方法来进行设置,调用SharePoint库方法_spBodyOnLoadFunctionNames,确保方法会在页面内容加载完成后执行。
_spBodyOnLoadFunctionNames.push("fillPeoplePickerWithCurrentUser");function fillPeoplePickerWithCurrentUser()
{ var currentUser = getCurrentUser(); if(currentUser != null) { var pp = getPickerInputElement(“SetMe”); if(pp != null) pp.innerHTML = currentUser; }
}
说明:
本方法没有在Firefox浏览器进行调试。