2013-07-22 2 views
0

В настоящее время я создаю фильтр, основанный на классе div и его содержимом.Проверьте, не находится ли число между двумя значениями

мне было интересно, если это можно передать строку, как следует в функцию: «£0.01 - £100.01»

и затем функцию показать все DIV, где HTML-код этого DIV находится между этим диапазоном

так сказать, у меня есть DIV с классом «цена» и его содержание были: £10.30

от выполнения этой функции и передавая строку «£0.01 - £100.01» в него было бы скрыть все DIV подобно тому, как я это сделал в js ниже, чем onl y показать div, где содержание «цена» в классе div находилось в пределах выбранного диапазона цен.

мне удалось сделать что-то подобное с совершенно фильтром, который я представлю здесь:

function brand(string){ 
    var brand = string; 
    $('.section-link').hide(); 
    $('.section-link').children('.brand.' + brand).parent().show(); 
    if (brand == "All Brands"){ 
     $('.section-link').show(); 
    } 
} 

Любые общие советы, или код очень ценится, чтобы помочь достичь этого :)

Спасибо, Simon

Edit:

Target Див пример:

<div class="section-link"> 
<div class="price"> £56.99</div> 
</div> 

Ответ помогает много, функция фильтра выглядит потрясающе, поэтому спасибо, что указали это.

Я просто пытаюсь найти способ разделить исходную строку, дойдя в, в двух значениях один низкий и один высокий, а также зачистка фунтов знаки

Edit:

удалось расколоть Исходная строка:

var range = string.replace(/\u00A3/g, ''); 
var rangearray = range.split("-"); 
alert(rangearray[0]); 
alert(rangearray[1]); 

FINAL EDIT:

от ответ-х я вроде был в состоянии чтобы сделать функцию, однако она не полностью работает :) может ли кто-нибудь определить, что я сделал неправильно?

function price(string){ 
    $('.section-link').hide(); 
    var range = string.replace(/\u00A3/g, ''); 
    var rangearray = range.split("-"); 
    low = rangearray[0]; 
    high = rangearray[1]; 

    $('.section-link').children('.price').each(function() { 
     var divprice = $(this).text().replace(/\u00A3/g, ''); 
     if (low <= divprice && high >= divprice){ 
      $(this).parent().show(); 
     } 
    }) 
} 

Хорошо, его работа, у меня были пробелы в моей строке. Последняя функция (хотя грязный: P) является:

function price(string){ 
    $('.section-link').hide(); 
    var range = string.replace(/\u00A3/g, ''); 
    var rangearray = range.split("-"); 
    low = rangearray[0].toString(); 
    high = rangearray[1].toString(); 
    lowmain = low.replace(/ /g,''); 
    highmain = high.replace(/ /g,''); 

    $('.section-link').children('.price').each(
     function() { 
      var divprice = $(this).text().replace(/\u00A3/g, ''); 
      var maindivprice = divprice.replace(/ /g,''); 

      if (lowmain <= maindivprice && highmain >= divprice){ 
       $(this).parent().show(); 
     } 
    }) 
} 
+2

http://stackoverflow.com/questions/4408676/if-value-is-between-two-numbers – Hariharan

+0

Можете ли вы предоставить целевой div's контента – dreamweiver

+0

цели div Я добавлю сейчас в редактирование –

ответ

2

Я хотел бы использовать функцию как этот, где range является строка, которую вы дали

function highlightDivs(range) { 
    var lower = range.split(" ")[0].slice(1); 
    var upper = range.split(" ")[2].slice(1); 

    $('.section-link').hide(); 
    $('.section-link').children('.price').each(function() {    
     if (lower <= $(this).val() && upper >= $(this).val()){ 
      $(this).parent().show(); 
     } 
    }); 
} 
+0

По существу это то же самое, что и Naor's, но получает min и max из строки, используя 'split' и' slice' –

1

Вы можете использовать сборку JQuery в фильтре функции(), и написать фильтр с условием, которую вы описали.

Прежде всего, вы должны скрыть все предметы любой ценой.

$(".price").parent().hide(); 

Затем, вы можете отфильтровать все элементы с ценами в-диапазоне и показать им:

$(".price").filter(function(){ 
    var $this = $(this); 
    var value = $this.val(); 
    return (value >= minNumber && value <= maxNumber); // returns boolean - true will keep this item in the filtered collection 

}).parent().show(); 
+0

Спасибо, никогда не видели фильтр, поэтому посмотрим на документацию для его использования. Любые идеи о том, как я могу фильтровать между двумя значениями? Я предполагаю, что мне придется разбить исходную строку на ее «-» и нанести знак £ –

+0

Добавлен пример, надеюсь, что это поможет :) ** Редактирование **: Я вижу, я отредактирую свой ответ с чем-то подобным. –

0

я бы что-то вроде:

  1. Получить все дивы, которые имеют Цены.
  2. перебрать все:
    1. Transform строки (минус символ фунта), чтобы плавать числа и сравнить с утверждением IF, если они находятся внутри указанный диапазон.
    2. Если они просто перейти к следующему (использование по-прежнему возможно)
    3. Else (не входит в диапазон) добавить класс как .hide поэтому он может быть смешан с помощью CSS (или просто использовать функцию смешивания с JQuery)
1

фильтр использовать JQuery (в)

Пример ->http://jsfiddle.net/H6mtY/1/

var minValue = 0.01, 
    maxValue = 100.01; 

var filterFn = function(i){ 
    var $this = $(this); 

    if($this.hasClass('amount')){ 

     // assume that text is always a symbol with a number 
     var value = +$this.text().match(/\d+.?\d*/)[0]; 

     if(value > minValue && value < maxValue){ 
      return true; 
     } 
    } 
    return false; 
}; 

// apply your filter to body for example 
$('#target span') 
.filter(filterFn) 
.each(function(i,ele){ 

    // do something with the selected ones 
    $(this).css('color','red'); 
}); 
+0

да, извините. Я обновил его. – AntouanK

Смежные вопросы