【问题标题】:Unable to slice strings retrieved from div's无法对从 div 检索到的字符串进行切片
【发布时间】:2015-01-08 13:23:19
【问题描述】:

我在使用 javascript/jquery 对从 div 检索到的文本进行切片时遇到问题。我以为你可以对每个字符串进行切片,并且 .text() 函数总是返回一个字符串,所以我看不到问题所在。任何帮助将不胜感激!

Fiddle

HTML:

<body>
<div class="vaknaam">Div 1 :<span class="totaal">55%</span>

</div>
<div class="vaknaam">Div 2 :<span class="totaal">60%</span>

</div>
<div class="vaknaam">Div 3 :<span class="totaal">64%</span>

</div>
<div class="vaknaam">Div 4 :<span class="totaal">76%</span>

</div>
<div class="vaknaam">Div 5 :<span class="totaal">63%</span>

</div>
</body>

Javascript:

$(function () {
var divs = {};
var tempString, vakken = {};
$('.vaknaam').each(function (key, value) {
  tempString = $(value).contents().filter(function () {
      return this.nodeType == 3;
  }).text();
  tempString = tempString.slice(0, - 2);
  vakken[tempString] = $(value).children('span').text();
 });

for (var property in vakken) {
  $('body').append("<p>" + property + "</p>");
}
});

【问题讨论】:

  • 您忽略了.slice() 调用的返回值。
  • 我会把它链接到.text()的末尾...所以...text().slice(0, -2)
  • 请注意,如果您发布 working(至少在您遇到问题的地方)代码,您的问题会更容易理解。在您的小提琴中,您不包含 jQuery 并且未定义 vakken。这些事情让你更难解决实际问题。
  • ...哦,如果您想摆脱:,您还需要$.trim() 文本。您实际上并没有告诉我们预期的输出是什么。
  • 我修好了小提琴。我很抱歉我的错误。我正在过滤文本节点,因为它实际上是:我希望摆脱。

标签: javascript jquery string slice


【解决方案1】:

你有几个错误。

  1. 您需要声明一个初始化 var vakken
  2. slice 方法不会修改字符串,因此您应该将返回的内容分配给某物。
  3. property var 只是一个索引,所以你需要询问vakken[property]

您的代码应如下所示:

$(function () {
  var divs = {};
  var tempString, vakken = {}; //1
  $('.vaknaam').each(function (key, value) {
      tempString = $(value).contents().filter(function () {
          return this.nodeType == 3;
      }).text();
      tempString = tempString.slice(0, -4); //2
      vakken[tempString] = $(value).children('span').text();
  });

  for (var property in vakken) {
      $('body').append("<p>" + property + "</p>"); //3
  }
});

看看这个codepen

【讨论】:

  • 你是对的,但我希望打印属性而不是 vakken 中的值。如果你追加属性,你会看到字符串没有被切片。
  • 对不起,我迷路了,你能给我看一个你想打印的例子吗?
  • Div 1 Div 2 Div 3 ...末尾没有':'。
  • 好的,所以只需将切片参数 -2 替换为 -4: tempString = tempString.slice(0, -4); . (我已经更新了代码)
  • 当我像上面建议的@squint 那样首先修剪它时它确实有效,非常感谢!
【解决方案2】:

slice 不会修改初始字符串,它是不可变的。试试:

tempString = tempString.slice(0, - 2);

【讨论】:

  • 它修复了切片问题,但代码仍然有错误。
猜你喜欢
  • 2012-07-13
  • 2021-11-20
  • 2014-07-08
  • 1970-01-01
  • 1970-01-01
  • 2021-03-12
  • 2017-09-28
  • 2012-11-20
  • 2011-12-03
相关资源
最近更新 更多