【问题标题】:How to pass Label contents to function如何将标签内容传递给函数
【发布时间】:2012-07-11 15:18:15
【问题描述】:

我有一个使用以下代码调用的 jQuery 函数。该函数搜索“QAList”中“words:”区域中显示的单词,然后将这些单词加粗。这段代码可以正常工作,并且“Demo”和“or”这两个词都加粗了。

    $("[id$=QAList]").wrapInTag({
      words: ['Demo User', 'or'],
      tag: '<selected>'
    });

我现在正试图从标签或文本框中传递“单词:”列表,但由于某种原因,我无法让它传递正确的信息,而且我不能 100% 确定它实际传递的是什么。

这就是我更改代码以从 lblSelectedQA 标签中提取的方式:

    $("[id$=QAList]").wrapInTag({
      words: [$("[id$=lblSelectedQA]").html()],
      tag: '<selected>'
    });

我什至从文本框中尝试过,以防标签由于某种原因无法正常工作:

    $("[id$=QAList]").wrapInTag({
      words: [$("[id$=lblSelectedQA]").val()],
      tag: '<selected>'
    });

如果我将它们放入警报中,我会从标签和文本框中得到我需要的东西,它们会返回:

'演示用户','或'

既然我试图从其他地方传递值,那么“单词:”之后的语法是否不正确?

谢谢!

**根据以下 iurisilvio 的回答进行编辑

为了回应您的回答,我在填充 'Demo User', 'or' 文本的内容中稍微更改了我的代码,以消除单引号和多余的空格。它现在看起来像这样:Demo User,or 并且适用于单个结果。

然后我尝试添加 .split(",") 如果我添加索引 [0] 或 [1],它适用于数组中的一个值,但不会独立用于所有数组项。

Utkanos 显示的内容基本相同,只是添加了一种方法来消除我不再需要的空格和单引号。

这是我现在适用于单个结果的代码:

    $("[id$=QAList]").wrapInTag({
      words: [$("[id$=lblSelectedQA]").html().split(",")],
      tag: '<selected>'
    });

但是当它返回多个结果时,除非我添加索引,否则它将无法工作,但只会对我硬编码的索引有效......不是一个选项,因为我不知道其中会有多少数组。

    $("[id$=QAList]").wrapInTag({
      words: [$("[id$=lblSelectedQA]").html().split(",")[0]],
      tag: '<selected>'
    });

    $("[id$=QAList]").wrapInTag({
      words: [$("[id$=lblSelectedQA]").html().split(",")[1]],
      tag: '<selected>'
    });

有没有办法让它获取所有数组项而不必遍历它们?

谢谢!

**编辑解决方案:

我需要把刚刚添加的括号去掉。我想通了,然后回来了,Utkanos 刚刚发布了同样的内容:)

工作代码:

    $("[id$=QAList]").wrapInTag({
      words: $("[id$=lblSelectedQA]").html().split(","),
      tag: '<selected>'
    });

谢谢!!

【问题讨论】:

标签: jquery asp.net jquery-ui jquery-plugins


【解决方案1】:

这样,你的话 var 等于["'Demo User', 'or'"](一个元素)。如果你拆分你的字符串,你会得到你想要的:

// suposing your_text is right
words: your_text.split(",")

当然这是一个简化的解决方案。如果你想得到类似'word, 1', 'word 2' 的东西,你需要一个更好的解析器来解决你的问题,但它就是这样。

【讨论】:

  • 这将在单词之前留下空格,而不是删除它们周围的单引号。
  • 谢谢!这就是我所缺少的。我没想到它是一个元素。我还发现,如果我以这种方式传递它,我将无法使用单引号。如果我将它放到单个元素并删除单引号,我有一个按我的方式工作的小提琴。现在我只需要弄清楚如何获得我认为拆分可能会做的多个值。
  • 我知道,但 OP 问题是关于“传递字符串而不是数组”。我给了他解决这个问题的方法。现在,他可以改进解析器来解决他在解析类似内容时会遇到的许多其他问题。
  • @divtag 所以将其标记为正确答案。这对我有好处,主要是对这篇文章的任何其他未来参考。
  • 如果插件需要一个数组,则传递字符串而不是数组是不可协商的。问题实际上是:“如何从字符串中获取一些数据并将其转换为适合此插件的数组?”
【解决方案2】:

words 参数应该是一个数组。字符串'Demo User', 'or' 看起来像是从包含这些值的数组中打印出来的,但最终是字符串,而不是数组。

换句话说,您传递的字符串看起来有点像数组,而不是实际的数组。

假设您从元素中检索的字符串是'Demo User', 'or',您需要通过分隔符将其拆分为一个数组 - 在您的情况下,是逗号和空格。您还需要删除各种标记周围的'

$("[id$=QAList]").wrapInTag({
    words: $("[id$=lblSelectedQA]").val().replace(/'/g, '').split(, ?/),
    tag: '<selected>'
});

【讨论】:

  • 谢谢。我知道你在这里做什么了,因为我走得更远了。我可以控制该字符串的创建方式,因此我摆脱了单引号和多余的空格。我现在无法看到我在对问题的编辑中显示的所有数组项。
  • 查看了您的编辑。单独使用 split 是不够的,因为您需要删除换行的单引号。编辑中的第一个代码 sn-p 不起作用的另一个原因是因为您将数组传递给数组,这会使插件感到困惑。试试我发布的代码而不用方括号括起来。 (刚刚意识到我的回答也犯了这个错误;现在已编辑)。
  • 谢谢!我就在几秒钟前尝试过,也发现了 :) 谢谢!!
猜你喜欢
  • 2017-07-08
  • 1970-01-01
  • 2014-10-09
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-08
相关资源
最近更新 更多