Jquery 如何使用'~=';返回部分匹配输入图像名称/文本的图像

Jquery 如何使用'~=';返回部分匹配输入图像名称/文本的图像,jquery,Jquery,可以用这个吗?(代码格式是混合html jQuery,但仅用于解释。) //输入的文本:“car” var text=$(“#输入”).text();//是由jquery获取的。。。 而不是像:(检索所有图像组合) //主体内部的区域。。。 $('#results')。追加(' 最后将所有匹配的图像添加到#result中,如下所示: carmageddon.png car.jpg red-car.jpg blue-car-micromachines.jpg car-yellow.gif 请记住

可以用这个吗?(代码格式是混合html jQuery,但仅用于解释。)

//输入的文本:“car”
var text=$(“#输入”).text();//是由jquery获取的。。。
而不是像:(检索所有图像组合)

//主体内部的区域。。。
$('#results')。追加('
最后将所有匹配的图像添加到#result中,如下所示:
carmageddon.png car.jpg red-car.jpg blue-car-micromachines.jpg car-yellow.gif

请记住,如果仅输入“黄色”,则仅返回具有“黄色”的图像

编辑: 简历:
如果您在输入字段中键入一个名称,您可以动态地在页面上显示一个图像,但前提是输入的名称与服务器上的图像名称相等。所以我的问题是:您只写入名称的一部分,而jquery会将与输入的名称部分匹配的所有图像附加到页面上……知道吗


非常感谢您的任何建议!

您可以使用正则表达式

我假设图像存储在数组
imgs

var appendText;
var myReg = '/('+ $('#input').text() +')+/g';
$('#myButton').click(function(){
    foreach( i in imgs ){
        if( myReg.match( imgs[i] ) ){
            appendText += '<img src="'+ imgs[i] +'">';
        }
    }
});

但在这里,您必须注意一些陷阱,例如输入包含转义字符。您必须动态替换这些字符。

要执行编辑中澄清的操作,您必须有服务器端代码,该代码接受搜索字符串并返回匹配图像的列表。否则,客户端将无法执行此操作-侧码,以了解可显示哪些图像

例如,假设您的HTML为:

<input id="imageSearch" type="text" value="" />
(对于生产代码,我会将其分解为几个部分,并变得更加偏执,但这只是一个简单的例子。)

您的服务器端
searchpage
(您必须使用您拥有的任何服务器端技术编写该页面,例如PHP、Java、ASP.Net等)将以(确保设置
内容类型:application/json
标题)进行回复,其可能如下所示:

(function() {                // Scoping function to avoid globals
    var currentSearch;

    $("#imageSearch").change(function() {
        var val = $(this).val(); // `val()`, not `text()`
        if (val.length > 2) {    // Or whatever
            // Start a search
            currentSearch = val;
            $.ajax({
                url: "searchpage",
                data: {search: val},
                success: function(data) {
                    var results;

                    // Is this still the current search?
                    // (Remember that network operations may
                    // be chaotic, if the user types another
                    // char you might get the response to your
                    // next call before your response to an
                    // earlier one. Unlikely, but it does happen.)
                    if (val === currentSearch) {
                        // Still current, show results if any
                        results = $("#results");
                        $.each(data.images, function(index, imgurl) {
                            // Already showing this image?
                            if (!results.find("img[src='" + imgurl + "']")[0]) {
                                // No, show it
                                results.append($("<img/>", {src: imgurl}));
                            }
                        });
                    }
                });
            }
        });
    })();
{
    "search": "car",
    "images": [
       "carmageddon.png",
       "car.jpg",
       "red-car.jpg",
       "blue-car-micromachines.jpg",
       "car-yellow.gif"
    ]
}

例如,一组匹配的相对图像URL。(我在回复中包含了搜索词,有时我觉得很方便;在上面的代码中没有实际使用。)

“我认为这有点不可能……但是,有解决办法吗?”当然,我在早餐前解决了六次不可能的问题。;-)(各位,我整个星期都在这里,别忘了给你们的女服务员小费。)(但说真的)你们要查看的主列表是什么?你们的标题是“查找页面上没有的同名图片”,那么要搜索的列表是什么呢?T.J.我很欣赏你的答案。我知道:如果你在输入字段中键入一个名称,你可以动态地显示一个图像,但前提是输入的名称与服务器上的图像名称相等。所以我的问题是:你只写名称的一部分,而jquery会将部分与T匹配的所有图像附加到页面他输入了名字……有什么想法吗?啊……全能的阿贾克斯!:)谢谢T.J。!只是一个问题。。。您有
“搜索”:“汽车”
。。。如果搜索终端为“黄色”怎么办?我遗漏了什么吗?@Matthias:这只是一个示例,说明了当查询“car”是搜索词时,服务器端代码可能会返回什么。我发现在搜索结果中回显搜索词很有用,从而使客户端处理更容易。您可以省去它,给出的代码实际上并不使用它(它使用
currentSearch
和闭包)。。。我想我会成功的!谢谢你在ID/input上的提醒(写我的问题是一个快速的错误),但是很高兴被提醒!我只是在闲逛,每个客户端浏览器中都有一些魔术师拿着一根魔杖。。。。我马上就去做!非常感谢!您在这里假设了一些魔力:您的
imgs
数组。事实证明,他没有,它需要在服务器端生成。
<input id="imageSearch" type="text" value="" />
(function() {                // Scoping function to avoid globals
    var currentSearch;

    $("#imageSearch").change(function() {
        var val = $(this).val(); // `val()`, not `text()`
        if (val.length > 2) {    // Or whatever
            // Start a search
            currentSearch = val;
            $.ajax({
                url: "searchpage",
                data: {search: val},
                success: function(data) {
                    var results;

                    // Is this still the current search?
                    // (Remember that network operations may
                    // be chaotic, if the user types another
                    // char you might get the response to your
                    // next call before your response to an
                    // earlier one. Unlikely, but it does happen.)
                    if (val === currentSearch) {
                        // Still current, show results if any
                        results = $("#results");
                        $.each(data.images, function(index, imgurl) {
                            // Already showing this image?
                            if (!results.find("img[src='" + imgurl + "']")[0]) {
                                // No, show it
                                results.append($("<img/>", {src: imgurl}));
                            }
                        });
                    }
                });
            }
        });
    })();
{
    "search": "car",
    "images": [
       "carmageddon.png",
       "car.jpg",
       "red-car.jpg",
       "blue-car-micromachines.jpg",
       "car-yellow.gif"
    ]
}