【问题标题】:Can I shorten a string of childNodes[0]?我可以缩短一串 childNodes[0] 吗?
【发布时间】:2011-07-22 16:08:10
【问题描述】:

我有这行代码。它工作得很好,但我想知道是否有更聪明(阅读:更短)的方法?

      svg.getElementById($(this).attr('id')).childNodes[0].childNodes[0].nodeValue = $(this).val();

我也在使用 jQuery,所以任何 jQuery 方法都可以 :)

达到的标记是

<text id=n>
<tspan>text to reach</tspan>
</text>

不过,如果即使标签被删除,我也能看到文本,那将是理想的。

【问题讨论】:

  • 你能粘贴你的标记,解释你想要达到的元素吗?
  • Element.textContent 将从 id 元素的角度为您提供文本,但它在 IE

标签: javascript jquery xml dom


【解决方案1】:

这应该可以让您更改文本:

$("#" + $(this).attr("id") + " tspan").text($(this).val());

【讨论】:

  • 好主意,但它不允许我更改值。我不能说$("#" + $(this).attr("id") + " tspan").text() = $(this).val();
  • @Eric,我不知道你试图改变它。我已经更新了我的答案。 text() 既可以用作 getter 也可以用作 setter,具体取决于您是否将参数传递给它。
  • 提醒一句:这不会改变 id 中的所有 tspan(如果有多个)?
  • 啊,这是我原始代码的一部分 :) 不用担心。效果很好!
  • @Hans 可以,我的 Inkscape 生成的 SVG 文件只使用一个。知道如何让它动态化,以便它可以更改 标签内的文本,无论里面是否还有 标签?
【解决方案2】:

这可能是一个杂项,但它会替换文本元素的结束节点值,无论它是否具有 tspan 元素。此示例作用于具有“替换”类的输入字段。

$('.replace').keyup(function() {    
  if ($("#" + $(this).attr("id")).has("tspan").length) {
    $("#" + $(this).attr("id") + " tspan").text($(this).val());
  } else {
    $("#" + $(this).attr("id")).text($(this).val());
  }
}

【讨论】:

  • 我的版本:$('.replace').keyup(function() { $("#" + $(this).attr("id") + ($("#" + $(this).attr("id")).has("tspan").length ? " tspan" : '')).text($(this).val()); 更短,如果可读性稍差 }
猜你喜欢
  • 2021-10-31
  • 1970-01-01
  • 2020-11-05
  • 1970-01-01
  • 1970-01-01
  • 2021-09-21
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
相关资源
最近更新 更多