En JavaScript, estoy diciendo que el navegador para hacer algo si el tamaño de la ventana es mayor que la de 500px. Yo lo hago así:

if (windowsize > 500) {
    //do this
}

Esto funciona muy bien, pero me gustaría aplicar este mismo método, pero con un rango de números. Así que me gustaría decirle a mi navegador para hacer las cosas, si el tamaño de la ventana es de entre 500px y 600px. Sé que esto no iba a funcionar, pero así es como me lo imaginaba:

if (windowsize > 500-600) {
    //do this
}

Esto es incluso posible, dentro de JavaScript?

InformationsquelleAutor Dyck | 2013-02-05

5 Comentarios

  1. 182

    Si las pruebas de windowsize es mayor que 500 y menor de 600 lo que significa que ni los valores 500 o 600 mismo, resultará en la condición de ser verdaderos.

    if (500 < windowsize && windowsize < 600) {
      //...
    }
    • gracias indefinido, solo para confirmar que esto va a hacer lo que yo quiero en el navegador cuando el tamaño de la ventana es mayor, a continuación, 500px y menos de 600px, esencialmente funcionamiento dentro del rango de 500-600px sólo, ¿correcto? (No soy muy bueno con estas cosas lol)
    • Sí, lo hace:) se nota que jQuery es sólo una biblioteca de JavaScript.
    • Cuenta que esta condición es sólo cierto cuando windowsize es al menos 501px y en la mayoría de los 599px. 500px y 600px están excluidos. Añadir a la igualdad de las comparaciones si desea inclusivo de estos valores.
    • Sólo un detalle, pero es más legible la siguiente manera: if(500 < windowsize && windowsize < 600)
  2. 97

    Yo tuve un momento, así que, aunque usted ya ha aceptado una respuesta, he pensado que me gustaría aportar la siguiente:

    JS:

    Number.prototype.between = function(a, b) {
      var min = Math.min.apply(Math, [a, b]),
        max = Math.max.apply(Math, [a, b]);
      return this > min && this < max;
    };
    
    var windowSize = 550;
    
    console.log(windowSize.between(500, 600));

    JS Violín demo.

    O, si prefieres tener la opción de marcar un número está en el rango definido incluyendo los puntos de terminación de:

    JS:

    Number.prototype.between = function(a, b, inclusive) {
      var min = Math.min.apply(Math, [a, b]),
        max = Math.max.apply(Math, [a, b]);
      return inclusive ? this >= min && this <= max : this > min && this < max;
    };
    
    var windowSize = 500;
    
    console.log(windowSize.between(500, 603, true));

    JS Violín demo.

    Editado para añadir una enmienda menor a la anterior, dado que – como se señaló en los comentarios –

    Function.prototype.apply() es lento! Además de llamar cuando se tiene una cantidad fija de argumentos es inútil…

    era digno de la eliminación de la utilización de Function.prototype.apply(), que los rendimientos de las versiones modificadas de los métodos anteriores, en primer lugar, sin el ‘inclusiva’ opción:

    JS:

    Number.prototype.between = function(a, b) {
      var min = Math.min(a, b),
        max = Math.max(a, b);
    
      return this > min && this < max;
    };
    
    var windowSize = 550;
    
    console.log(windowSize.between(500, 600));

    JS Violín demo.

    Y con el ‘inclusiva’ opción:

    JS:

    Number.prototype.between = function(a, b, inclusive) {
      var min = Math.min(a, b),
        max = Math.max(a, b);
    
      return inclusive ? this >= min && this <= max : this > min && this < max;
    }
    
    var windowSize = 500;
    
    console.log(windowSize.between(500, 603, true));

    JS Violín demo.

    Referencias:

    • ¿por qué uso se aplican en lugar de llamar directamente como Main.min(a,b)? La función.el prototipo.aplicar es lento! Además de llamar cuando se tiene una cantidad fija de argumentos es inútil.
    • Voy a añadir esto a mi cuadro de herramientas predeterminada – muy útil y gracias por este aporte!
    • usted tiene un punto! He actualizado la respuesta a reflexionar que, aunque sospecho que tenía – inicialmente – a la razón para el uso de Function.prototype.apply(), pero no puedo pensar en lo que fue, o pudo haber sido.
    • Todavía hay un montón de estos hechos en su respuesta. Creo que sólo he corregido un par de. 🙂
    • Solución agradable. Sólo una molestia aquí, pero en su lugar prefieren return min < this && this < max como se siente el más correcto, viendo como this se intercala entre los operadores de comparación.
    • es MUCHO mejor crear una función que no modifica el Number objeto. Este es un anti-patrón y vendrá y te muerden si los estándares de ECMA cambiar para incluir un Number.between() la función, o si de otra biblioteca o de otra pieza de código se define Number.prototype.between en otros lugares con una definición diferente. En su lugar, hacer una función auxiliar y el uso que!
    • Mientras que su punto tiene sentido que la modificación/ampliación de los objetos nativos es mala práctica, creo que es un poco redundante tener este predicado en todas partes (sin ánimo de ofender). No puedo contar las veces que he visto «no modificar objetos nativos». Para mí, esto es como alguien que vende familia de cuchillos de advertencia al comprador acerca de los posibles peligros de la cuchilla cada vez que él/ella vende uno igual que su responsabilidad del vendedor si hay algún daño. Los peligros deben ser de conocimiento común. Debe ser el usuario si él/ella no hace caso de ellos o no.
    • De hecho, Modificación de objetos nativos puede quemar si por alguna razón el código modular en algún momento y las modificaciones a los objetos nativos se pierden.

  3. 65

    Prefiero poner la variable en el interior para darle un extra de sugerencia de que el código de validación de mi variable es entre un rango de valores

    if (500 < size && size < 600) { doStuff(); }
    • me gusta este estilo! se adaptará que 🙂
    • Esta es mi preferencia, ya que está más cerca de python min < testval < max sintaxis
  4. 0

    He implementado este poco de jQuery para mostrar y ocultar modal de bootstrap valores. Diferentes campos se muestran en función de la gama de valores de los usuarios de un cuadro de texto de entrada.

    $(document).ready(function () {
        jQuery.noConflict();
        var Ammount = document.getElementById('Ammount');
    
        $("#addtocart").click(function () {
    
                if ($(Ammount).val() >= 250 && $(Ammount).val() <= 499) {
                    {
                        $('#myModal').modal();
                        $("#myModalLabelbronze").show();
                        $("#myModalLabelsilver").hide();
                        $("#myModalLabelgold").hide();
                        $("#myModalPbronze").show();
                        $("#myModalPSilver").hide();
                        $("#myModalPGold").hide();
                    }
                }
        });
    • Usando jQuery trivial de funciones fue en 2013 tal vez una opción, pero no es hoy
    • Cierto, pero me temo que la gente todavía se utilizan hoy en día
    • Por curiosidad: ¿por qué es jQuery peor para el uso trivial de funciones ahora que entonces?
    • la mayoría de rendimiento, aunque insignificante en este caso. La idea general sería «no uso jQuery cuando no es necesario», pero estos comentarios no son el lugar para la (re)iniciar el debate. diviértete con este, aunque 🙂 i.stack.imgur.com/sGhaO.gif
    • Esto es sólo una aplicación de la solución. OP ya tiene acceso a los valores. Así jQuery $().val() es irrelevante y no es necesario. Pero, de nuevo, en la versión original de la pregunta, OP menciona jQuery, por una simple aritmética de verificación. (suspiro) Ese es el primer error.

Dejar respuesta

Please enter your comment!
Please enter your name here