使用LIKE操作符选择所有匹配模式的复选框


Use LIKE operator to select all checkboxes that match pattern

我需要一些指导。我有一个HTML表单,它由一个很长的项目列表组成,这些项目是从数据库查询生成的数组中提取的(这是一个大学课程列表)。用户需要能够选择与他们的研究相关的尽可能多或尽可能少的课程:因为列表可以有数百个或数百个项目,所以我有一个"全选"answers"不选"功能,并添加了一个jQuery shift-select批处理选择器,以使这尽可能容易。

然而,我也希望他们能够在输入框中输入一些文本,然后单击APPLY,使用LIKE运算符选择标签文本模式匹配的所有复选框(即,如果他们想要所有数学课程,或所有2xx级别的课程)。该项目使用PHP和JavaScript/jQuery/AAJAX。

我知道如何基于LIKE查询从数据库中提取,但我只是有点困惑于如何最好地循环生成的表单并针对表单中的项目。(我的PHP很强,我的jQuery有点不稳定)。

复选框列表是通过数组中的循环生成的,每个项目设置如下:

$o .= '<input id="'.$rw[2].'_'.$rw[0].'"
type=checkbox  name="' . $rw[2].'_'. $rw[0]. '" />';
$o .= '<label for="'.$rw[2].'_'. $rw[0].'"> ' . $rw[1] . '</label>';
$o .= '</td>';

因此,我们最终得到了一个简单的复选框表单,其中包含LABEL FOR和标签文本,并且这些项都被命名为数组键。

这是一个典型项目的HTML输出:

<tr><td><input id="110_105" type=checkbox name="110_105" />
<label for="110_105"> PHIL233</label></td></tr>

如果这个描述有点长,我很抱歉,但我需要的是如何在生成表单后循环遍历表单的元素,为模式匹配的每个项目选择复选框。

希望这是有道理的!

Tamra

这种情况非常适合使用AJAX来过滤复选框列表。相反,我强烈主张这样做。

但是,如果需要在客户端上进行筛选,那么使用JavaScript相当容易。

//give the labels a class so they are easy to find
var labels = document.getElementsByClassName('course-name');
//filtering text field
var query = document.getElementById('query');
//'apply' button
var queryBtn = document.getElementById('query-submit');
queryBtn.addEventListener('click', function() {
    for (var i = 0; i < labels.length; i += 1) {
        var label = labels[i];
        var text = label.innerText;
        if (text === query.value) {
            label.previousElementSibling.checked = true;
        }
    }
}, false);

您可以使用jQuery查找方法进行尝试。

http://api.jquery.com/find/

有了它和"属性包含选择器",你就可以完成这项任务。

http://api.jquery.com/attribute-contains-selector/