我一直在与我过去编写的一些代码进行斗争并试图调整它。目前,我的搜索仅搜索匹配的单词的第一个字符。我需要更深入地搜索。例如,如果我在这个字符串中搜索行星:
"Earth is a planet"
我什么都没得到,但如果我在下一个字符串中搜索行星:
"Planet earth is amazing"
我得到数据网格以显示该行。
我希望能够搜索显示该行的单词,无论它是在字符串的开头还是在字符串的结尾。
有人可以帮帮我吗?提前谢谢。
import fl.controls.DataGrid;
import fl.controls.TextInput;
import fl.controls.dataGridClasses.DataGridColumn;
import fl.data.DataProvider;
var voddb:DataProvider = new DataProvider();
voddb.addItem({title:"Earth is a planet", detail:"ALE 0110"});
voddb.addItem({title:"Planet Earth", detail:"ALE 0210"});
voddb.addItem({title:"Jupiter is a planet", detail:"ALE 0310"});
voddb.addItem({title:"Aplanet Jupiter", detail:"ALE 0410"});
voddb.addItem({title:"Another amazing planet is mars", detail:"ALE 0510"});
voddb.addItem({title:"Planets include earth and mars:", detail: "ALE 0610"});
vodTextInput.addEventListener(Event.CHANGE, changeHandler);
var titleCol:DataGridColumn = new DataGridColumn("title");
titleCol.headerText = "Title";
var detailCol:DataGridColumn = new DataGridColumn("detail");
detailCol.headerText = "Details";
detailCol.sortOptions = Array.DESCENDING;
vodDataGrid.addColumn(titleCol);
vodDataGrid.addColumn(detailCol);
vodDataGrid.dataProvider = voddb;
function changeHandler(event : Event) : void
{
var arr : Array = voddb.toArray();
var filteredArr : Array = arr.filter(filterDataProvider);
vodDataGrid.dataProvider = new DataProvider(filteredArr);
}
function filterDataProvider(obj : Object, idx : String, arr : Array) : Boolean
{
var txt1 : String = vodTextInput.text;
var txt2 : String = obj.title.substr(0, txt1.length);
if (txt1.toLowerCase() == txt2.toLowerCase())
{
return true;
}
return false;
}
答案 0 :(得分:2)
您可以使用indexOf
搜索字符串。
function filterDataProvider(obj : Object, idx : int, arr : Array) : Boolean
{
var txt1 : String = vodTextInput.text.toLowerCase();
var txt2 : String = obj.title.toLowerCase();
return txt2.indexOf(txt1) >= 0;
}