2011-09-24 42 views
3

我正在使用SharePoint 2010,其中一个aspx页面包含Note Board Web部件,它提供了简单的功能,可以在给定页面上留言。使用JQuery在任何AJAX调用之后修改DOM我无法控制

当页面加载时,评论由该Web部件使用AJAX检索,我无法控制AJAX调用何时完成。

我试图插入在每个表中的数据标签的链接或一些文字,Web部件使用的意见,即

<td class="socialcomment">Comment 1</td> 
<td class="socialcomment">Comment 2</td> 
<td class="socialcomment">Comment 3</td> 

到使用JQuery这样

<td class="socialcomment">Comment 1 <a href="#">Report inappropiate</a></td> 
<td class="socialcomment">Comment 2 <a href="#">Report inappropiate</a></td> 
<td class="socialcomment">Comment 3 <a href="#">Report inappropiate</a></td> 

$('td.socialcomment').append(' <a href="#">Report inappropiate</a>'); 

我还没有能够在上面的场景中使用jQuery的live()函数(wo为了其他场景我有),但我认为这是因为它是为事件设计的。 我也尝试过.ajaxComplete(),但它并没有完全实现,因为我没有控制Ajax调用或SharePoint执行的Ajax调用未使用JQuery注册。

任何帮助或洞察力非常感谢。 在此先感谢!

回答

0

我一定希望了解比这更好的方法 - 您可以使用setInterval来定期检查DOM中与您的选择器匹配的元素,以及您尚未“处理”的元素并将其链接添加到它们中并将它们标记为“已处理”。尽管如此,我不会对乐观表现感到乐观。

喜欢的东西:

setInterval(processComments, 250); 

//... 

function processComments() { 
    $('td.socialcomment:not(.processed)').append(' <a href="#">Report inappropiate</a>').addClass('processed'); 
} 

这里有一个fiddle


更新
根据这一jQuery forum threadliveQuery插件显然可以让你指定当新的元素添加到DOM将要执行的功能(使用jQuery的DOM操作方法,如果我理解正确) 。

0

如果Sharepoint中的ajax调用是使用jQuery的ajax框架完成的,那么您可以注册一个global ajaxComplete handler,当任何ajax调用完成时它将被调用。这只适用于使用jQuery进行的Ajax调用。

0

我面临同样的问题,我是能够利用实时功能的这样

$(window).load(function() { 
    $('span.socialcomment-username').find("a").live({ 
     click: function() { 
     alert("asd"); 
     }, 
     mouseover: function() { 
     $(this).removeAttr('href'); 
     $(this).removeAttr('onclick'); 
     }, 
     mouseout: function() { 
     $(this).removeClass("over"); 
     } 
    }); 
    });