【问题标题】:Attribute selected option by text not value?按文本选择的属性不是值?
【发布时间】:2014-11-13 06:31:19
【问题描述】:

单击表格行时,行文本会复制到上面的输入以进行编辑。文本复制得很好,但我无法正确选择所有选项。我的文本与值不同(对于每个选择,它是第三列),所以我不能使用选择的 .val() 。

我需要在文本与文本开头匹配的地方选择属性/属性,以及它是否可报销(第三列)。想法? jsfiddle.net/7vLdxddr/14

$('.table').on('click', 'tr', function () {

                if ($(this).hasClass('selected')) {
                    $(this).removeClass('selected');
                }
                else {
                    $('tr.selected').removeClass('selected');
                    $(this).addClass('selected');
                }

                for (var i = 0; i < $(this).find("td").length; i++) {
                    // fill input values
                    $(this).closest("table").find("th").eq(i).find("input:text").val($(this).find("td").eq(i).text());
                    // fill selects
                    $(this).closest("table").find("th").eq(i).find("select").val($(this).find("td").eq(i).text());
                }
            });

【问题讨论】:

  • 遍历选项,检查文本,如果匹配,设置选中的属性。
  • 例子?小提琴已经设置好了。
  • select的文本值可以改变还是动态生成?

标签: javascript jquery dynamic drop-down-menu attributes


【解决方案1】:

如果你这样做,你不需要有等于文本的值。

    $('table').on('click', 'tr', function () {
        if ($(this).hasClass('selected')) {
            $(this).removeClass('selected');
        }
        else {
            $('tr.selected').removeClass('selected');
            $(this).addClass('selected');
        }

    // fill inputs
    $(this).closest("table").find("th").eq(0).find("input:text").val($(this).find("td").eq(0).text());

    // fill selects      
   var text = $(this).find("td").eq(1).text();
   var text3 = $(this).find("td").eq(2).text();

   $(this).closest("table").find("th").eq(1).find("select option").filter(function() {
    return $(this).text().indexOf(text) >= 0 && $(this).text().indexOf($(this).closest("table").find("th").eq(2).find('select option[value="' + text3 + '"]').text()) > 0;
}).prop('selected', true);        

   $(this).closest("table").find("th").eq(2).find('select').val(text3);

});

http://jsfiddle.net/7vLdxddr/15/

【讨论】:

  • 如何使用 indexOf() 添加到此内容?我的一些 td 有空格或破折号。 jsfiddle.net/7vLdxddr/12
  • 差不多。我不希望选择改变,只需匹配第一个单词并选择该选项。
  • 这是什么意思?您不希望“选择更改”,但您想“选择该选项”?
  • 让我换个例子。
  • 好吧,这比我最初解释的要复杂。首先,我需要该选项(从给定的下拉选项中)来选择 td 中的文本是否匹配。例如,“Plane”应该选择“Plane - ...”选项。此外,我的可报销选择确实匹配值,并且“平面”选项取决于可报销的库伦。 jsfiddle.net/7vLdxddr/14
【解决方案2】:

只需更新选择值的值以反映来自点击的文本(即circirclesqsquare,它可以完美运行。

http://jsfiddle.net/7vLdxddr/10/

您的代码试图做的是选择一个值为circle 的输入,但circle 字段的值是cir,所以它没有被正确选择。

【讨论】:

  • 但问题是“我的文本与值不一样”,所以仅仅修改值可能不是一个好的答案。
  • @Kristoffer 啊,没错,我的将是硬编码值的最快解决方案,但如果它是动态的(或从其他网站抓取等)并且需要匹配,那么您的答案效果最好。我想需要更好地理解手头的问题。
猜你喜欢
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 2014-08-31
  • 2012-12-24
  • 2023-04-03
相关资源
最近更新 更多