【问题标题】:Find non-matches in HTML select list against JSON list using Jquery使用 Jquery 在 HTML 选择列表中针对 JSON 列表查找不匹配项
【发布时间】:2015-01-16 02:02:16
【问题描述】:

我有一个 SelectList 从我的 MVC ActionResult 作为 Json 数据返回:

控制器:

  public JsonResult _ConnectorFilters(string arg1, string arg2, string arg3) {
      //collecting selectlist items ex: 
      listConatenated.Add(newSelectListItem {Value = "Category1", Text = "attribute1"};
      listConatenated.Add(newSelectListItem {Value = "Category1", Text = "attribute2"}
      listConatenated.Add(newSelectListItem {Value = "Category2", Text = "attribute3"};

     return Json(new SelectList(listConcatenated, "Value", "Text"));

 }

我想在我的视图的 <select/> 列表中找到每个 option 项目,它们与我的 JsonResult 中返回的匹配类别具有相同的 value,但 不匹配 em> 文本,并将它们每个的“禁用”属性更改为“真”。

重申一下,如果我当前的 列表中有以下内容:

  <select class="Category1Class">
     <option value="Category1">attribute100<option/>
     <option value="Category1">attribute40<option/>
     <option value="Category1">attribute1<option/>
     <option value="Category1">attribute2<option/>
  </select>

然后我试图写入 success: 结果函数的 jquery 函数将返回:

  <select class="Category1Class">
     <option value="Category1" disabled>attribute100<option/>
     <option value="Category1" disabled>attribute40<option/>
     <option value="Category1">attribute1<option/>
     <option value="Category1">attribute2<option/>
  </select>                     

我希望这是有道理的。与 Json 结果进行比较时,不确定如何开始。提前谢谢你,如果我能更清楚,请告诉我。

【问题讨论】:

    标签: jquery json parsing filter selectlistitem


    【解决方案1】:

    假设响应类似于:

    [
     { "Value": "Category1","Text": "attribute1"},
     { "Value": "Category1","Text": "attribute2"}
    ]
    

    您可以使用each() 循环响应并使用filter() 隔离匹配的DOM 元素:

    var $opts= $('select.Category1Class option');
    /* loop over response as "data" */
    $.each(data, function( index, item){
       $opts.filter(function(){
           /* return boolean based on matches */
           return $(this).text() === item.Text && this.value === item.Value;
          /* disable resultant collection */
       }).prop('disabled', true);
    });
    

    【讨论】:

    • 这看起来正是我所需要的——但我希望更改列表中的 non-matches。这将返回data 中匹配Value 但不匹配Text 的项目并禁用那些$opts。如果您可以稍微更改示例,那将非常有帮助。谢谢!
    • 只需相应地更改条件返回
    • 声明:$(this).text() === !selectItem.Text 是否足以作为适当的“非”语法?
    • 更像!$(this).text() === item.Text &amp;&amp; !this.value === item.Value;
    • hmm...它仍然没有过滤/禁用带有 Json 结果中不存在的文本的选项。在我的示例中,这些将是:&lt;option value="Category1" disabled&gt;attribute100&lt;option/&gt;&lt;option value="Category1" disabled&gt;attribute40&lt;option/&gt;
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-07
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多