【问题标题】:javascript: extract value from attribute parameterjavascript:从属性参数中提取值
【发布时间】:2020-01-06 16:06:51
【问题描述】:
<svg>
  <g id="g1" transform="translate(100 80)"/>
</svg>

<script>
  var tr_value = document.getElementById("g1").getAttribute("transform");
  alert(tr_value);   // result: translate(100 80)      need: 100
</script>

各位专家,告诉我如何获取属性参数的值,以防属性具有多个参数,而它们又具有多个值。在上面的示例中,我想将 100 的值放入变量中。 我真的希望在 Javascript 中有一个漂亮的方法。然后首先想到的是解析文本或正则表达式。

【问题讨论】:

  • JavaScript 并不直接了解 SVG;属性值只是文本。您必须自己解析它,可能使用正则表达式。
  • 我一遍又一遍地看到人们调用函数然后不检查返回。当一个函数返回一些东西时,它可能会成功,也可能不会。像许多其他人一样,您没有在使用前检查退货。在调用 getAttribute 之前检查 getElementById 的返回,然后在使用前检查 getAttribute 的返回。

标签: javascript getattribute


【解决方案1】:

您必须编写一个正则表达式或字符串解析器来执行此操作。

例如.*\((\d*) \d*\)

let tr_value = document.getElementById("g1").getAttribute("transform")
let regex = /.*\((\d*) \d*\)/g
let matches = regex.exec(tr_value)
console.log(matches[1]) // "100"
<svg>
  <g id="g1" transform="translate(100 80)"/>
</svg>

.*\((\d*) \d*\)正则解释:

.* - 任何字符序列
\( - 后跟一个左括号
( - 开始匹配数组的捕获组
\d* - 匹配任何数字序列
) - 结束捕获组
- 后跟空格<br>\d* - 后跟任意数字序列
\) - 后跟右括号

注意:匹配的值将是一个字符串,因此如果这是您的代码所期望的,您可能需要将其转换为数值。

【讨论】:

  • 非常感谢您的回答。非常快速且内容丰富。我什至会说太快而且信息量太大)))
猜你喜欢
  • 2015-03-07
  • 2022-10-08
  • 2021-03-27
  • 1970-01-01
  • 2019-10-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多