- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我为 TYPO3 编写了一个扩展。现在我有一个问题。谁能告诉我,如果我想在搜索字符串或下拉过滤器没有返回任何结果时显示自定义警告文本消息,我必须做什么?类似于:
“抱歉 - 我们无法使用此搜索过滤器找到任何条目!”
目前我的代码如下所示:
// Isotope Steinlexikon
$(function() {
var $container = $('#lexikon-masonry'),
$select = $('#lexikon-filter select'),
filters = {};
var qsRegex;
var SelectFilter = '*';
$container.isotope({
itemSelector: '.item',
// Filter mit Suchfeld
filter: function() {
var $this = $(this);
var SerRes = qsRegex ? $(this).text().match( qsRegex ) : true;
var SelRes = $(this).is(SelectFilter);
return SerRes && SelRes;
}
});
// use value of search field to filter
var $quicksearch = $('#quicksearch').keyup( debounce( function() {
qsRegex = new RegExp( $quicksearch.val(), 'gi' );
$container.isotope();
}, 200 ) );
// debounce so filtering doesn't happen every millisecond
function debounce( fn, threshold ) {
var timeout;
return function debounced() {
if ( timeout ) {
clearTimeout( timeout );
}
function delayed() {
fn();
timeout = null;
}
timeout = setTimeout( delayed, threshold || 100 );
}
}
//fancybox
$('.fancybox2').on('click', function(e){
e.preventDefault(); // Default action ausschalten
$.fancybox({
//width: 500,
//height: 400,
autoSize: true,
href: $(this).attr('href'),
type: 'ajax'
});
});
// Filter mit Select Form
$select.change(function() {
var $this = $(this);
// store filter value in object
// i.e. filters.color = 'red'
var group = $this.attr('data-filter-group');
filters[ group ] = $this.find(':selected').attr('data-filter-value');
// console.log( $this.find(':selected') )
// convert object into array
var isoFilters = [];
for ( var prop in filters ) {
isoFilters.push( filters[ prop ] )
}
console.log(filters);
SelectFilter = isoFilters.join('');
$container.isotope();
return false;
});
});
#lexikon-masonry .item {
margin: 5px;
padding: 5px;
background: #fff;
border: 1px #ccc solid;
float: left;
-moz-box-shadow: 0px 6px 6px 0px rgba(0,0,0,0.2);
-webkit-box-shadow: 0px 6px 6px 0px rgba(0,0,0,0.2);
box-shadow: 0px 6px 6px 0px rgba(0,0,0,0.2);
}
#lexikon-masonry .item img {
opacity: 1;
}
#lexikon-masonry .item:hover img {
opacity: 0.5;
}
#lexikon-masonry .image-hover #image-caption {
position: relative;
width: 100%;
text-align: center;
bottom: 0px;
background: #fff;
z-index: 1;
opacity: 1;
text-transform: uppercase;
}
#lexikon-masonry .image-hover:hover #image-caption {
opacity: 0.8;
}
#lexikon-masonry .image-hover #image-caption span {
text-transform: none;
}
#lexikon-masonry .image-hover .img-button-link {
position: absolute;
/*left: 50%;
top: 50%;*/
margin-left: 110px;
margin-top: -125px;
opacity: 0;
}
#lexikon-masonry .image-hover:hover .img-button-link {
opacity: 1;
}
div#lexikon-filter {
position:left;
}
div.lexStyled {
float: left;
margin-right: 20px;
overflow:hidden; /* this hides the select's drop button */
padding:0;
margin:0;
background: white url(../images/select-down.png) no-repeat bottom right;
/* this is the new drop button, in image form */
width:12em;
border-radius:2px;
box-shadow: 0 1px 3px rgba(0,0,0,0.2);
border: solid 1px #ccc;
}
div.lexStyled select {
width:115% /* this percentage effectively extends the drop down button out of view */;
background-color:transparent /* this hides the select's background making any styling visible from the div */;
background-image:none;
-webkit-appearance: none /* this is required for Webkit browsers */;
border:none;
box-shadow:none;
padding:0.3em 0.5em; /* padding should be added to the select, not the div */
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://isotope.metafizzy.co/v1/jquery.isotope.min.js"></script>
<div class="row">
<div id="lexikon-suche" class="col span_3">
<input class="form-control" type="text" data-filter-value="" id="quicksearch" placeholder="Durchsuchen" />
</div>
<div id="lexikon-filter" class="col span_9">
<div class="lexStyled">
<select data-filter-group="gestein">
<option data-filter-value="*" class="selected">Alle Gesteine</option>
<option data-filter-value=".lagersteine" class="selected">Lagersteine</option>
<option data-filter-value=".kunststeine" class="selected">Kunststeine</option>
</select>
</div>
<div class="lexStyled">
<select data-filter-group="farbe">
<option data-filter-value="*" class="selected">Alle Farben</option>
<option data-filter-value=".rot" class="selected">Rot</option>
<option data-filter-value=".gelb" class="selected">Gelb</option>
</select>
</div>
</div>
</div>
<br><hr><br>
<div class="row">
<div id="lexikon-masonry" class="col span_12">
<div class="item image-hover lagersteine rot gelb">
<div id="image-caption" class="name">Test1</div>
</div>
<div class="item image-hover kunststeine rot">
<div id="image-caption" class="name">Test2</div>
</div>
<div class="item image-hover lagersteine kunststeine gelb">
<div id="image-caption" class="name">Test3</div>
</div>
</div>
</div>
我没有完成这些答案中给出的示例( jQuery Isotope filter to no items? )。它对我不起作用。
感谢您的帮助
最佳答案
你可以像这样获取同位素实例
$container.data('isotope')
它有属性$filteredAtoms
,它保存过滤的项目。因此,要获得计数,请使用以下命令:
var visibleItemsCount = $container.data('isotope').$filteredAtoms.length;
对于V2
var visibleItemsCount = $container.data('isotope').filteredItems.length;
过滤后,检查可见项目。如果有,则隐藏消息,否则显示。
// Function to check if filters have some results
function checkResults(){
var visibleItemsCount = $container.data('isotope').$filteredAtoms.length;
if( visibleItemsCount > 0 ){
$('.no-results').hide();
}
else{
$('.no-results').show();
}
}
// Isotope Steinlexikon
$(function() {
var $container = $('#lexikon-masonry'),
$select = $('#lexikon-filter select'),
filters = {};
var qsRegex;
var SelectFilter = '*';
$container.isotope({
itemSelector: '.item',
// Filter mit Suchfeld
filter: function() {
var $this = $(this);
var SerRes = qsRegex ? $(this).text().match( qsRegex ) : true;
var SelRes = SelectFilter == '' || $(this).is(SelectFilter);
return SerRes && SelRes;
}
});
// use value of search field to filter
var $quicksearch = $('#quicksearch').keyup( debounce( function() {
qsRegex = new RegExp( $quicksearch.val(), 'gi' );
$container.isotope();
checkResults();
}, 200 ) );
// debounce so filtering doesn't happen every millisecond
function debounce( fn, threshold ) {
var timeout;
return function debounced() {
if ( timeout ) {
clearTimeout( timeout );
}
function delayed() {
fn();
timeout = null;
}
timeout = setTimeout( delayed, threshold || 100 );
}
}
// Function to check if filters have some results
function checkResults(){
var visibleItemsCount = $container.data('isotope').$filteredAtoms.length;
console.log(filters);
if( visibleItemsCount > 0 ){
$('.no-results').hide();
}
else{
$('.no-results').show();
}
}
//fancybox
$('.fancybox2').on('click', function(e){
e.preventDefault(); // Default action ausschalten
$.fancybox({
//width: 500,
//height: 400,
autoSize: true,
href: $(this).attr('href'),
type: 'ajax'
});
});
// Filter mit Select Form
$select.change(function() {
var $this = $(this);
// store filter value in object
// i.e. filters.color = 'red'
var group = $this.attr('data-filter-group');
filters[ group ] = $this.find(':selected').attr('data-filter-value');
// console.log( $this.find(':selected') )
// convert object into array
var isoFilters = [];
for ( var prop in filters ) {
if( filters[ prop ] != '*' ){
isoFilters.push( filters[ prop ] )
}
}
SelectFilter = isoFilters.join('');
$container.isotope();
checkResults();
return false;
});
});
#lexikon-masonry .item {
margin: 5px;
padding: 5px;
background: #fff;
border: 1px #ccc solid;
float: left;
-moz-box-shadow: 0px 6px 6px 0px rgba(0,0,0,0.2);
-webkit-box-shadow: 0px 6px 6px 0px rgba(0,0,0,0.2);
box-shadow: 0px 6px 6px 0px rgba(0,0,0,0.2);
}
#lexikon-masonry .item img {
opacity: 1;
}
#lexikon-masonry .item:hover img {
opacity: 0.5;
}
#lexikon-masonry .image-hover #image-caption {
position: relative;
width: 100%;
text-align: center;
bottom: 0px;
background: #fff;
z-index: 1;
opacity: 1;
text-transform: uppercase;
}
#lexikon-masonry .image-hover:hover #image-caption {
opacity: 0.8;
}
#lexikon-masonry .image-hover #image-caption span {
text-transform: none;
}
#lexikon-masonry .image-hover .img-button-link {
position: absolute;
/*left: 50%;
top: 50%;*/
margin-left: 110px;
margin-top: -125px;
opacity: 0;
}
#lexikon-masonry .image-hover:hover .img-button-link {
opacity: 1;
}
.no-results{
display:none;
}
div#lexikon-filter {
position:left;
}
div.lexStyled {
float: left;
margin-right: 20px;
overflow:hidden; /* this hides the select's drop button */
padding:0;
margin:0;
background: white url(../images/select-down.png) no-repeat bottom right;
/* this is the new drop button, in image form */
width:12em;
border-radius:2px;
box-shadow: 0 1px 3px rgba(0,0,0,0.2);
border: solid 1px #ccc;
}
div.lexStyled select {
width:115% /* this percentage effectively extends the drop down button out of view */;
background-color:transparent /* this hides the select's background making any styling visible from the div */;
background-image:none;
-webkit-appearance: none /* this is required for Webkit browsers */;
border:none;
box-shadow:none;
padding:0.3em 0.5em; /* padding should be added to the select, not the div */
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="http://isotope.metafizzy.co/v1/jquery.isotope.min.js"></script>
<div class="row">
<div id="lexikon-suche" class="col span_3">
<input class="form-control" type="text" data-filter-value="" id="quicksearch" placeholder="Durchsuchen" />
</div>
<div id="lexikon-filter" class="col span_9">
<div class="lexStyled">
<select data-filter-group="gestein">
<option data-filter-value="*" class="selected">Alle Gesteine</option>
<option data-filter-value=".lagersteine" class="selected">Lagersteine</option>
<option data-filter-value=".kunststeine" class="selected">Kunststeine</option>
</select>
</div>
<div class="lexStyled">
<select data-filter-group="farbe">
<option data-filter-value="*" class="selected">Alle Farben</option>
<option data-filter-value=".rot" class="selected">Rot</option>
<option data-filter-value=".gelb" class="selected">Gelb</option>
</select>
</div>
</div>
</div>
<br><hr><br>
<div class="row">
<div id="lexikon-masonry" class="col span_12">
<div class="item image-hover lagersteine rot gelb">
<div id="image-caption" class="name">Test1</div>
</div>
<div class="item image-hover kunststeine rot">
<div id="image-caption" class="name">Test2</div>
</div>
<div class="item image-hover lagersteine kunststeine gelb">
<div id="image-caption" class="name">Test3</div>
</div>
</div>
<div class="no-results">Sorry - we can't find any entries with this search filters!</div>
</div>
关于javascript - 同位素 : Create warning if search and filter doesn't give back any result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29888585/
我对这个错误很困惑: Cannot implicitly convert type 'System.Func [c:\Program Files (x86)\Reference Assemblies\
考虑这段代码: pub trait Hello { fn hello(&self); } impl Hello for Any { fn hello(&self) {
问题很简单。是否可以构造这样一个类型 T,对于它下面的两个变量声明会产生不同的结果? T t1 = {}; T t2{}; 我已经研究 cppreference 和标准一个多小时了,我了解以下内容:
Intellij idea 给我这个错误:“Compare (T, T) in Comparator cannot be applied to (T, T)” 对于以下代码: public class
任何人都可以告诉我 : n\t\t\t\t\n\t\t\t 在以下来自和 dwr 服务的响应中的含义和用途是什么. \r\n\t\t\t \r\n\t\t\t
让 T 成为一个 C++ 类。 下面三个指令在行为上有什么区别吗? T a; T a(); T a = T(); T 为不带参数的构造函数提供了显式定义这一事实是否对问题有任何改变? 后续问题:如果
Rust中的智能指针是什么 智能指针(smart pointers)是一类数据结构,是拥有数据所有权和额外功能的指针。是指针的进一步发展 指针(pointer)是一个包含内存地
比如我有一个 vector vector > v={{true,1},{true,2},{false,3},{false,4},{false,5},{true,6},{false,7},{true,8
我有一个来自 .xls 电子表格的数据框,我打印了 print(df.columns.values) 列,输出包含一个名为:Poll Responses\n\t\t\t\t\t。 我查看了 Excel
This question already has answers here: What are good reasons for choosing invariance in an API like
指针类型作为类型前缀与在类型前加斜杠作为后缀有什么区别。斜线到底是什么意思? 最佳答案 语法 T/~ 和 T/& 基本上已被弃用(我什至不确定编译器是否仍然接受它)。在向新向量方案过渡的初始阶段,[T
我正在尝试找到一种方法来获取模板参数的基类。 考虑以下类: template class Foo { public: Foo(){}; ~Foo(){};
这是一个让我感到困惑的小问题。我不知道如何描述它,所以只看下面的代码: struct B { B() {} B(B&) { std::cout ::value #include
为什么有 T::T(T&) 而 T::T(const T&) 更适合 copy ? (大概是用来实现move语义的???) 原始描述(被melpomene证明是错误的): 在C++11中,支持了一种新
在 Java 7 中使用 eclipse 4.2 并尝试实现 List 接口(interface)的以下方法时,我收到了警告。 public T[] toArray(T[] a) { ret
假设有三个函数: def foo[T](a:T, b:T): T = a def test1 = foo(1, "2") def test2 = foo(List(), ListBuffer()) 虽
我对柯里化(Currying)和非柯里化(Currying)泛型函数之间类型检查的差异有点困惑: scala> def x[T](a: T, b: T) = (a == b) x: [T](a: T,
考虑一个类A,我如何编写一个具有与相同行为的模板 A& pretty(A& x) { /* make x pretty */ return x; } A pretty(A&& x) {
Eclipse 表示由于泛型类型橡皮擦,类型参数不允许使用 instanceof 操作。 我同意在运行时不会保留任何类型信息。但是请考虑以下类的通用声明: class SomeClass{ T
在 C++14 中: 对于任何整数或枚举类型 T 以及对于任何表达式 expr: 有没有区别: struct S { T t { expr }; }; 和 struct S { T t = { exp
我是一名优秀的程序员,十分优秀!