Html5通過js進行頁面內搜尋
阿新 • • 發佈:2019-02-10
/*將搜尋輸入框置頂*/
(function($) {
$.fn.fixDiv = function(options) {
var defaultVal = {
top : 10
};
var obj = $.extend(defaultVal, options);
$this = this;
var _top = $this.offset().top;
var _left = $this.offset().left;
$(window).scroll(function () {
var _currentTop = $this.offset().top;
var _scrollTop = $(document).scrollTop();
if (_scrollTop > _top) {
$this.offset({
top : _scrollTop + obj.top,
left : _left
});
} else {
$this.offset({
top : _top,
left : _left
});
}
});
return $this;
}
})(jQuery);
$(function() {
$("#search_box").fixDiv({
top : 0
});
$("#search_btn" ).click(highlight);
$('#searchstr').keydown(function(e) {
var key = e.which;
if (key == 13) highlight();
});
var i = 0;
var sCurText;
function highlight() {
clearSelection(); //清空上一次高亮顯示的內容
var flag = 0;
var bStart = true;
$('#tip').text('');
$('#tip').hide();
var searchText = $('#searchstr').val();
var _searchTop = $('#searchstr').offset().top + 30;
var _searchLeft = $('#searchstr').offset().left;
if ($.trim(searchText) == "") {
showTips("請輸入關鍵字", _searchTop, 3, _searchLeft);
return;
}
//查詢匹配
var searchText = $('#searchstr').val();
var regExp = new RegExp(searchText, 'g');
var content = $("#content").text();
if (!regExp.test(content)) {
showTips("沒有找到", _searchTop, 3, _searchLeft);
return;
} else {
if (sCurText != searchText) {
i = 0;
sCurText = searchText;
}
}
//高亮顯示
$('p').each(function() {
var html = $(this).html();
var newHtml = html.replace(regExp, '<span class="highlight">' + searchText + '</span>');
$(this).html(newHtml);
flag = 1;
});
//定位並提示資訊
if (flag == 1) {
if ($(".highlight").size() > 1) {
var _top = $(".highlight").eq(i).offset().top +
$(".highlight").eq(i).height();
var _tip = $(".highlight").eq(i).parent().find("strong").text();
if (_tip == "") {
_tip = $(".highlight").eq(i).parent().parent().find("strong").text();
}
var _left = $(".highlight").eq(i).offset().left;
var _tipWidth = $("#tip").width();
if (_left > $(document).width() - _tipWidth) {
_left = _left - _tipWidth;
}
$("#tip").html(_tip).show();
$("#tip").offset({
top : _top,
left : _left
});
$("#search_btn").val("查詢下一個");
} else {
var _top = $(".highlight").offset().top + $(".highlight").height();
var _tip = $(".highlight").parent().find("strong").text();
var _left = $(".highlight").offset().left;
$('#tip').show();
$("#tip").html(_tip).offset({
top : _top,
left : _left
});
}
$("html, body").animate({
scrollTop : _top - 50
});
i++;
if (i > $(".highlight").size() - 1) {
i = 0;
}
}
}
function clearSelection() {
$('p').each(function() {
//找到所有highlight屬性的元素;
$(this).find('.highlight').each(function() {
$(this).replaceWith($(this).html()); //將他們的屬性去掉;
});
});
}
var tipsDiv = '<div class="tipsClass"></div>';
$('body').append(tipsDiv);
function showTips(tips, height, time, left) {
var windowWidth = document.documentElement.clientWidth;
$('.tipsClass').text(tips);
$('div.tipsClass').css({
'top' : height + 'px',
'left' : left + 'px',
'position' : 'absolute',
'padding' : '8px 6px',
'background' : '#000000',
'font-size' : 14 + 'px',
'font-weight' : 900,
'margin' : '0 auto',
'text-align' : 'center',
'width' : 'auto',
'color' : '#fff',
'border-radius' : '2px',
'opacity' : '0.8',
'box-shadow' : '0px 0px 10px #000',
'-moz-box-shadow' : '0px 0px 10px #000',
'-webkit-box-shadow' : '0px 0px 10px #000'
}).show();
setTimeout(function() {
$('div.tipsClass').fadeOut();
}, (time * 1000));
}
})
html5程式碼
<div id="search_box">
<input class="textbox" id="searchstr" type="text" size="10"
name="searchstr" /> <input class="sbttn" id="search_btn"
type="button" value="頁內查詢" />
</div>
<div id="content"></div>