我如何才能执行“;查找“;函数
How can I perform a "find" function on a single HTML page with collapsable sections?
我使用twitter引导程序创建了一个帮助页面,其中包含可折叠的部分。下面是一个最小的代码示例:
<div class="accordion" id="accordion2">
<div class="panel-heading">
<h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseOne">
Sample heading one
</a>
</h4>
</div>
<div id="collapseOne" class="accordion-body collapse">
<div class="panel-body">
<p>Sample paragraph one</p>
</div>
</div>
<div class="panel-heading">
<h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseTwo">
Sample heading two
</a>
</h4>
</div>
<div id="collapseTwo" class="accordion-body collapse">
<div class="panel-body">
<p>Sample paragraph two</p>
</div>
</div>
</div>
与其建立数据库,不如索引页面、添加搜索框并创建搜索结果页面;我想允许用户使用类似于浏览器自带的"查找"功能的"查找(find)"功能,即键入一个单词,找到匹配的单词,并在点击后移动到下一个单词。
由于我的页面上充满了可折叠的部分,我希望该部分在找到后进行扩展。所以我的问题是,如何在一个具有可折叠部分的HTML页面上执行"查找"功能?
这可能是一个程序化的锤子,但它应该能做到:
如果不清楚发生了什么,请在jsFiddle上完整评论代码
$('#find').click(function(){
var btn = $(this);
btn.prop("disabled",true);
var term = $('#term').val();
$('.collapse').collapse("hide");
var rd = new RegExp('<span class="found">('+term+')<'/span>', "ig");
$('#accordion2').html( $('#accordion2').html().replace(rd, '$1' ) );
var occurences=[];
$('#accordion2 .panel-body').each(function(i,e){
var r = new RegExp('('+term+')', "ig");
if( $(this).html().match(r) ){
var matches = $(this).html().match(r);
$.each(matches, function(){
occurences.push(i);
});
$(this).html( $(this).html().replace(r, '<span class="found">$1</span>') );
}
});
var l =occurences.length;
var c = Number( $('#current').html() );
c = c > 0 ? c+1: 0;
c = c > l ? 1 : c;
c = c == 0 && l > 0 ? 1 : c ;
$('#count').html( l > 0 ? ' of '+ l : ' matches found in document');
$('#current').html( c );
if(c != 0){
$('#accordion2 .accordion-toggle').eq( occurences[c-1] ).click();
$('.found').eq(c-1).focus();
}
setTimeout(function() { btn.prop("disabled",false); }, 1000);
});
// reset everything if the user starts typing again
$('#term').keydown(function(){
var term = $('#term').val();
var rd = new RegExp('<span class="found">('+term+')<'/span>', "ig");
$('#accordion2').html( $('#accordion2').html().replace(rd, '$1' ) );
$('#count').html(''); // reset our labels
$('#current').html('');
});
.found{
background-color:yellow;
}
span{
margin-left:15px;
font-size:16px;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<input type="text" id="term" value="cool" placeholder="search.."/><input type="button" id="find" value="Find"/><div id="labels"><span id="current"></span><span id="count"></span></div>
<div class="accordion" id="accordion2">
<div class="panel-heading">
<h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseOne">
Sample heading one
</a>
</h4>
</div>
<div id="collapseOne" class="accordion-body collapse">
<div class="panel-body">
<p>Cool sample paragraph one</p>
</div>
</div>
<div class="panel-heading">
<h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseTwo">
Sample heading two
</a>
</h4>
</div>
<div id="collapseTwo" class="accordion-body collapse">
<div class="panel-body">
<p>Cool sample paragraph two</p>
</div>
</div>
<div class="panel-heading">
<h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseThree">
Sample heading three
</a>
</h4>
</div>
<div id="collapseThree" class="accordion-body collapse">
<div class="panel-body">
<p>Cool sample paragraph one</p>
</div>
</div>
<div class="panel-heading">
<h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseFour">
Sample heading four
</a>
</h4>
</div>
<div id="collapseFour" class="accordion-body collapse">
<div class="panel-body">
<p>Cool sample paragraph two cool</p>
</div>
</div>
</div>
如果可以使用jquery,则可以使用:contains(my_string)
伪选择器。以下是一个示例:http://jsfiddle.net/911d1zwk/
$("button").on("click", function(){
var search = $("input").val();
$("div.collapse").find(":contains('"+search+"')").parent().collapse("show");
});
这会获取您的搜索字符串,并找到它所在的可折叠div。这可以是多个div。然后它在正确的手风琴上触发Bootstrap的"展开"方法。希望这能有所帮助!
您可以在引导程序中尝试collapse()函数来隐藏和显示手风琴。下面是一个工作示例。
$(document).ready(function(){
$('a.searchContent').on('click', function(){
var q = $('input#input_search').val();
searchFunction(q.toLowerCase());
});
});
function searchFunction(s){
console.log(s);
$('.collapse').each(function(){
var divText = $(this).text();
console.log(divText.toLowerCase(), s);
if(divText.toLowerCase().indexOf(s) > -1){
$(this).collapse('show');
}
if(divText.toLowerCase().indexOf(s) < -1){
$(this).collapse('hide');
}
});
}
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<div class="accordion" id="accordion2">
<div class="panel-heading">
<h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseOne">
Sample heading one
</a>
</h4>
</div>
<div id="collapseOne" class="accordion-body collapse">
<div class="panel-body">
<p>Sample paragraph one, Abc, xyz</p>
</div>
</div>
<div class="panel-heading">
<h4 class="panel-title">
<a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseTwo">
Sample heading two
</a>
</h4>
</div>
<div id="collapseTwo" class="accordion-body collapse">
<div class="panel-body">
<p>Sample paragraph two, def, wxy</p>
</div>
</div>
</div>
<div><input type="text" name="search" id="input_search" /><br>
<a href="#" class="searchContent">Search!</a>
</div>
相关文章:
- 正在全局范围中查找JavaScript函数
- 在不使用jquery的情况下查找页面中的所有锚点并附加函数
- 重构查找函数
- 我如何才能执行“;查找“;函数
- 在JScript 5.8/WSH中具有属性查找的函数名
- jQuery函数来查找表行中的哪个按钮被单击
- 类型错误: $(..).查找(..).on 不是一个函数
- 如何通过查找函数及其 ID 访问和操作 HTML 表
- 查找函数'的呼叫者
- Emacs:在 etag 中查找函数定义
- 如何查找函数是内置函数还是用户定义的函数
- 用于查找函数字符串 javascript 的正则表达式
- 在 D3.js 中,是否可以将刻度标签的查找函数传递给序数刻度
- JS:正则表达式,用于查找函数体中的所有函数调用
- Google Apps 脚本查找函数调用方 ID
- Regex按名称查找函数,其声明可以是任何格式
- 查找函数或循环中的
- 如何查找函数所属的对象
- 正则表达式查找函数名
- 查找函数调用的DOM位置