调用.getElementsByTagName('tbody')返回thead

时间:2013-09-12 14:25:09

标签: javascript sharepoint

这是我今天遇到的一个有趣的复杂功能:调用tbody标签也会返回thead。

首先是代码:

function GetAnchors(){
if(!document.getElementById('WebPartWPQ2')){
    return;
};
var item = document.getElementById('WebPartWPQ2').getElementsByTagName('table');
if(!item[0]){
    return;
}
try{
item = item[0].firstChild.firstChild.firstChild.getElementsByTagName('table');
item = item[0].getElementsByTagName('tbody');
item = item[0].getElementsByTagName('tr');
for(i=0; i<item.length; i++){
    if(item[i].getElementsByTagName('td')[1].hasAttribute("height")){
        item[i].getElementsByTagName('td')[1].firstChild.innerHTML = Hijack( item[i].getElementsByTagName('td')[1].firstChild.innerHTML);
    }
}
}catch(err){
    return;
}

}

新的代码行:

item = item[0].getElementsByTagName('tbody');

我已经测试过,所以这有效:

item = item[1].getElementsByTagName('tbody');

所以它返回带有tbody的thead元素。

对于那些选择它的人,是的,这是SharePoint。(2013)浏览器在兼容模式IE9中是IE10。

我在几页上都有这个,除了一个之外它有效,html的结构没有显着差异(即表和单元格结构相同,只是不同内的文字。)

我只是好奇,有没有人见过这个?还是更好的一些文档?

或者这只是IE?

1 个答案:

答案 0 :(得分:1)

感谢您的关注,但我明白了。

显然,在SharePoint 2013(也可能是2010年)中,“分配给列”标题创建为表格:

<div class="ms-vh-div" name="AssignedTo" SortFields="" ResultType="" FieldType="User" DisplayName="Assigned To" CTXNum="7" FilterDisableMessage="" Filterable="" FilterDisable="" SortDisable="" Sortable="">
<table dir="none" cellSpacing="0" cellPadding="0">
    <tbody>
        <tr>
            <td class="ms-imnImgTD"><img id="imnhdr7" onload="IMNRegisterHeader(event)" border="0" alt="" src="" width="12" height="12" valign="middle" altbase="Presence enabled for this column">
            </td>
            <td class="ms-vh ms-imnTxtTD" noWrap="">
                <a id="diidSort7AssignedTo" class="ms-headerSortTitleLink" onfocus="OnFocusFilter(this)" onclick="javascript:return OnClickFilter(this,event);" href="javascript: " SortingFields=""><img class="ms-hidden" border="0" alt="Use SHIFT+ENTER to open the menu (new window)." src="" width="1" height="1"></a>
                <img border="0" alt="" src="">
                <img border="0" alt="" src="">
            </td>
        </tr>
    </tbody>
</table>

因此,它在thead中返回了tbody。

这可能听起来很明显,但它的嵌套非常深。

再次感谢您的时间。