在span标记内查找特定值

时间:2016-06-11 13:51:00

标签: javascript jquery html

我试图在span标签内找到一个特定的单词 <span>位于<pre>内 我想得到&#34; 6&#34;从下面的代码。

<span class="infos">Scale: Ab Major
Time Signature: 6/8
Tempo: 80
Suggested Strumming: DU,DU,DU,DU
</span>

我也希望得到&#34; 80&#34;同样把它放进<input> TempoTime Signature的值不断变化,因此简单的搜索和检索无效。

我在SO上尝试了很多方法,但似乎没有什么能帮助我。

这是最接近的代码。但它没有帮助。

<script>
$("span:contains('Tempo:')").html(function(_, html) {
    return html.replace(/(Tempo:)/g, '<span class="tem">$1</span>');
});
</script>

<span class="infos">Scale: Ab Major
 Time Signature: 6/8
 Tempo: 80
  Suggested Strumming: DU,DU,DU,DU
</span>

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:0)

您需要使用捕获组来获取变化的部分,而不是恒定的部分,因此您可以将变量部分复制到替换中的适当位置。

$("span:contains('Tempo:')").html(function(_, html) {
    return html.replace(/Tempo: (\d+)/, '<span class="tem">Tempo: <input name="tempo" value="$1"></span>');
});
.infos {
  white-space: pre;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<span class="infos">Scale: Ab Major
 Time Signature: 6/8
 Tempo: 80
  Suggested Strumming: DU,DU,DU,DU
</span>

答案 1 :(得分:0)

如果每个信息都在不同的行上,那么这是一个解决方案:

var infosList = $(".infos").text().split('\n');
var time = infosList[1].split(":")[1].trim().split("/");
//time : [6,8]
var tempo = infosList[2].split(":")[1].trim();
//tempo : 80

这里是一个JsFiddle:DEMO

答案 2 :(得分:0)

使用这种方式更好:

var formatted_data = new Array();;
var info_data = $(".infos").html().split("\n"); 
$.each( info_data, function( index, value ){
    var data = value.split(":");
    formatted_data[data[0]]=$.trim(data[1]);
});
$("#time_signature").html(formatted_data["Time Signature"]);
$("#tempo").html(formatted_data["Tempo"]);

这样您就可以检索信息范围内的所有数据。

你也可以参考下面的JSFiddle:

https://jsfiddle.net/aman_chhabra/nvs16wr1/

答案 3 :(得分:0)

我已经修改了Barmer的答案,以找到“时间签名”&#39;值。

我认为这可能对你有所帮助。

&#13;
&#13;
$("span.infos").html(function(_, html) {
  var searchWord = 'Time Signature:';
  var searchWordlen = searchWord.length;
  var lastIndexofSearchWord = html.lastIndexOf(searchWord) + searchWordlen;
  var timeSignature = html.substring(lastIndexofSearchWord, html.lastIndexOf("/"));
  timeSignature = parseInt(timeSignature); //here is your value
  alert(timeSignature);
  return html.replace(/Tempo: (\d+)/, '<span class="tem">Tempo: <input name="tempo" value="$1"></span>');
});
&#13;
.infos {
  white-space: pre;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<span class="infos">Scale: Ab Major
 Time Signature: 6/8
 Tempo: 80
  Suggested Strumming: DU,DU,DU,DU
</span>
&#13;
&#13;
&#13;