2013-04-18 60 views
0

在我的应用程序中,我有一个defaultDataTable,带有可点击的列和用于过滤表的搜索字段。过滤器在将字符插入输入字段后过滤数据表的内容。我的目标是在适用于用户输入的字段中强调(或其他css)文本部分。Wicket datatable更改字体或更改后的单元格的css

示例:如果用户输入'ab',字符串'abc'的字符'a'和'b'应加下划线。使用Javascript,我可以添加一些样式,但是我的函数用数据表做了一些奇怪的事情。它会删除表格标签中的所有内容,并将新的HTML放在那里。所有其他信息都没有了。我究竟做错了什么?

<script> 
    $('.searchField').keyup(function(){ 
     var page = $('.datatable'); 
     alert(page.text()); 
     var pageText = page.text().replace("<span>","").replace("</span>"); 
     alert(pageText); 
     var searchedText = $('#searchField').val(); 
     var theRegEx = new RegExp("("+searchedText+")", "igm");  

     var newHtml = pageText.replace(theRegEx ,"<b>$1</b>"); 
     alert(newHtml); 
     page.html(newHtml); 
    }); 
</script> 

新表:

<table id="ID" class="datatable" wicket:id="ID"> 
Col1 Col2 123 
<b>MATCHEDCHAR</b> 
TEXT 
<b>MATCHEDCHAR</b> 
TEXT 
</table> 

旧表(折叠机身连接头):

<table id="ID" class="datatable" wicketsource="URL.java" wicket:id="ID"> 
<thead wicketsource="org.apache.wicket.extensions.markup.html.repeater.data.table:DataTable.java:181" wicket:id="topToolbars"> 
<tbody wicketsource="org.apache.wicket.extensions.markup.html.repeater.data.table:DataTable.java:207" wicket:id="body"> 
<tr class="even" wicketsource="org.apache.wicket.extensions.markup.html.repeater.data.table:DefaultDataTable.java:71" wicket:id="rows"> 
</tbody> 
</table> 

回答

1

我觉得你有searchField其执行表刷新的处理程序。 所以你只需要在complete ajax event上标注。

Wicket.Event.subscribe('/ajax/call/complete', function(jqEvent, attributes, jqXHR, errorThrown, textStatus) { 
    // call code that highlight the text 
}); 

您可以将此订阅方法放在页面中(在script标记中)。 如果要链接JS调用到一个特定的行为说OnChangeAjaxBehavior,那么你需要调用target.appendJavaScript

new OnChangeAjaxBehavior(){ 
     @Override 
     protected void onUpdate(AjaxRequestTarget target) { 
      target.appendJavaScript("<call highlight function here>"); 
     } 
    }; 

尝试this的jQuery插件的亮点。 更多关于ajax全球通话听众here

我已经做了一个简单的demo,所以你可以检查它。

+0

谢谢你的回答。我不明白如何订阅ajax事件。我的searchfield附带了一个onChangeAjaxBehavior&onUpdate,但wicket.event.subscribe永远不会被调用。你如何连接它们? – Attiej

+0

我已更新答案,请检查它。请接受答案,如果它解决您的问题,请。 –

+0

注意:Wicket.Event.subscribe ...是一个js代码 –

相关问题