2016-06-11 66 views
0

我正在尝试查找范围标记内的特定单词。
<span>位于<pre>之内。
我想从下面的代码中获得“6”。查找范围标记内的特定值

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

我也想获得“80”,并把它放到<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> 

任何帮助真的很感激。

+0

一个肮脏的正则表达式,如果你需要它,那将拍子后得到的数字的第一组签名之间和/,第二组数字:>'/签名:\ W(\ d + )\/\ d + \ nTempo:\ W(\ d +)/' – moped

+0

你不想说你想用你说的'*'想要做什么* *想要得到*,“你需要那些回答对此做些什么?替换它,移动它,将它存储在一个变量..? –

回答

0

我已经修改巴尔梅尔的答案,找到“拍号”值。

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

$("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>'); 
 
});
.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>

+0

这正是我想要的。谢谢! –

+0

我在我的电脑上创建了一个简单的.html文件,粘贴了这段代码,并在Chrome中打开了页面。但没有任何事情发生。调试控制台也没有显示任何内容。你能告诉我我做错了什么吗? 我把标签

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>

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

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/