gpt4 book ai didi

javascript - 使 Javascript-search-function 快速

转载 作者:行者123 更新时间:2023-11-30 09:09:40 24 4
gpt4 key购买 nike

我用 javascript 做了一个小的搜索函数来查找表中的字符串:有仅包含数字作为 id 的“tr”,也有包含“childNode+idOfParentNode”作为 id 的“tr”(例如:

<tr id="1"> ... </tr>
<tr id="childNode1"> ... </tr>

现在我想查看表格,看看给定的字符串或它的一部分是否与父“tr”的内容相匹配。如果不是这种情况,我希望隐藏(或折叠)父节点“tr”及其子节点“tr”。如果字符串或其一部分匹配,我希望显示它们。这是我的功能:

// inputFieldId := Id of the inputField that contains the search-String
// tableId := Id of the table to be searched
function searchTable( inputFieldId, tableId ){
var inputField = document.getElementById( inputFieldId );
var input = inputField.value.toUpperCase();
var countRows = jQuery( '#' + tableId + ' tr' ).length;
jQuery('#loader').css( "visibility", "visible" );
var hideChildren = false;
var childId = -1;
var parentId = -1;

for( var i = 1; i <= countRows; i++ ){
var trsId = jQuery('#' + tableId + ' tr:nth-child('+i+')' ).attr('id');
// I am only looking for <tr> that are not "childnodes"
if( trsId.indexOf( "childNode") == -1 ){
var firstTd = jQuery('#' + tableId + ' tr:nth-child('+i+') td:nth-child(1)' );
var firstTdValue = firstTd.text();
if( firstTdValue.indexOf( input ) == -1 ){
hideChildren = true;
childId = trsId;
parentId = i;
jQuery('#' + tableId + ' tr:nth-child('+i+')' ).children('td').css("visibility", "collapse");
jQuery('#' + tableId + ' tr:nth-child('+i+')' ).css("visibility", "collapse");
}
else{
hideChildren = false;
childId = trsId;
parentId = i;
jQuery('#' + tableId + ' tr:nth-child('+i+')' ).children('td').css("visibility", "visible");
jQuery('#' + tableId + ' tr:nth-child('+i+')' ).css("visibility", "visible");
}
}
else{
childNodeId = "childNode"+childId;
if( hideChildren && trsId == childNodeId && parentId > -1 ){
jQuery('#' + tableId + ' tr:nth-child('+i+')' ).children('td').css("visibility", "collapse");
jQuery('#' + tableId + ' tr:nth-child('+i+')' ).css("visibility", "collapse");
}
else{
jQuery('#' + tableId + ' tr:nth-child('+i+')' ).children('td').css("visibility", "visible");
jQuery('#' + tableId + ' tr:nth-child('+i+')' ).css("visibility", "visible");
}
}
}
jQuery('#loader').css( "visibility", "hidden" );
}

说真的,这工作正常,但它需要永远!!!特别是如果它是一个更大的表,所以我想知道是否有人看到了一种使我的功能更快更高效的方法。

提前致谢:)

============================================= ==========================

编辑:我让它工作了......它现在看起来像这样并且工作得很好:)

function searchTable( inputFieldId, tableId ){
jQuery('#loader').show();
var input = jQuery('#'+inputFieldId).val().toUpperCase();
var parentId = -1

jQuery('#' + tableId + ' tr').each( function(i) {
var thiss = jQuery(this);
var showP = false;
var showC = false;
if (thiss.attr('id').indexOf('child') < 0) { // parent
parentId = thiss.attr('id');
showP = !(thiss.find('td:first').text().indexOf( input ) < 0);
thiss.toggle( showP );
}
else{ // childNode
var childId = "childNode"+parentId;
var parent = jQuery('#'+tableId+' tr#'+parentId+':visible').length;
showC = !(thiss.attr('id') == childId && parent < 1);
thiss.toggle( showC );
}
});
jQuery('#loader').css( "visibility", "hidden" );
}

谢谢你:)

最佳答案

如果 parent (和 child )拥有识别他们身份的类会更容易,但如果需要,您可以使用 ID。我使用 $ 而不是 jQuery,但如果需要,您可以将其改回原样。

// inputFieldId := Id of the inputField that contains the search-String
// tableId := Id of the table to be searched
function searchTable( inputFieldId, tableId ){
var input = $('#' + inputFieldId).text().ToUpperCase();

$('#loader').show();

$('#' + tableId + ' tr').each( function(i) {
var $this = $(this);
var show = false;
// if ($this.hasClass('parent')) { // would be nice
if ($this.attr('id').indexOf('child') < 0) { // parent
// note that text() here is the combined texts of all tds
// adjust with :first if you really want to check only the first
show = !($this.find('td').text().indexOf( input ) < 0);
}
$this.toggle( show );
});

$('#loader').hide();
}

关于javascript - 使 Javascript-search-function 快速,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1232818/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com