如何选择多个ID并检查它是否具有相同的文本?

时间:2017-08-19 08:50:28

标签: javascript jquery html dom

SWEEPFILE = 'sweep.wav'
RECFILE = 'rec.wav'
OUTPUTFILE = 'IR.wav'

import wavfile
from scipy import signal
import numpy as np

def ratio(dB):
    return np.power(10, dB * 1.0 / 20)

def padarray(A, length, before=0):
    t = length - len(A) - before
    if t > 0:
        width = (before, t) if A.ndim == 1 else ([before, t], [0, 0])
        return np.pad(A, pad_width=width, mode='constant')
    else:
        width = (before, 0) if A.ndim == 1 else ([before, 0], [0, 0])
        return np.pad(A[:length - before], pad_width=width, mode='constant')

def filter20_20k(x, sr): # filters everything outside out 20 - 20000 Hz
    nyq = 0.5 * sr
    sos = signal.butter(5, [20.0 / nyq, 20000.0 / nyq], btype='band', output='sos')
    return signal.sosfilt(sos, x)

sr, a, br = wavfile.read(SWEEPFILE, normalized=True)
sr, b, br = wavfile.read(RECFILE, normalized=True)

a = padarray(a, sr*50, before=sr*10)
b = padarray(b, sr*50, before=sr*10)
h = np.zeros_like(b)

for chan in [0, 1]:
    b1 = b[:,chan]

    b1 = filter20_20k(b1, sr)
    ffta = np.fft.rfft(a)
    fftb = np.fft.rfft(b1)
    ffth = fftb / ffta
    h1 = np.fft.irfft(ffth)
    h1 = filter20_20k(h1, sr)

    h[:,chan] = h1

h = h[:10 * sr,:]
h *= ratio(dB=40)

wavfile.write(OUTPUTFILE, sr, h, normalized=True, bitrate=24)

我希望只有当所有三个ID上都有字符“X”时才能执行该功能。

5 个答案:

答案 0 :(得分:2)

您可以在数组中设置这些值,然后使用Array#Filter检查它们是否都等于X

function checkValues() {
  const values = [
    document.getElementById('b1').value,
    document.getElementById('b2').value,
    document.getElementById('b3').value,
  ];

  if (values.filter(a => a.toLowerCase() === 'x').length === values.length) {
    console.log('Someone won');
  }
}
<input id="b1"/>
<input id="b2"/>
<input id="b3"/>
<button onclick="checkValues()">Check values</button>

答案 1 :(得分:0)

function checkIfSomeoneWon() {
var b1 = document.getElementById('b1').value;
var b2 = document.getElementById('b2').value;
var b3 = document.getElementById('b3').value;


if((b1.indexOf("X") !== -1)&&(b2.indexOf("X") !== -1)&&(b3.indexOf("X") !== -1)){
alert('Someone Won!');
}
}

答案 2 :(得分:0)

试试这个

function check() {
    var one = $('#one').val(), two = $('#two').val();

    if (one.indexOf('x') > -1 && two.indexOf('x') > -1) {
        alert('winner you got the game');
    }
}

这应该有用。

答案 3 :(得分:0)

只需使用&&运算符即可

function checkIfSomeoneWon() {
    if ($('#b1').html() === 'X' && $('#b2').html() === 'X' && $('#b3').html() === 'X')
    {
        alert('Someone Won!');
    }
}

checkIfSomeoneWon();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span id='b1'>X</span>
<span id='b2'>X</span>
<span id='b3'>X</span>

答案 4 :(得分:0)

你的条件陈述错了!

jQuery选择器会返回一个像数组一样的jQuery对象,当你得到html()时,它会在第一个对象中返回你的html e.g

<div>
    <div id="b1">Y</div>
    <div id="b2">X</div>
    <div id="b3"></div>
</div>

条件陈述的结果将

$('#b1, #b2, #b3').html() => Y

我不知道你想要什么,但是当你得到html进行比较时,我认为你的解决方案很糟糕。我认为你应该使用复选框并将它们的值进行比较。

回到你的问题,你可以使用

var result = $('#b1,#b2,#b3').filter(function(i, e){
    return $(e).html() === 'X';
});

if(result && result.length) {
    //TODO something
    alert('Someone Won!');
}