2012-02-11 100 views
2

如何從id =「old- [id]」的span獲得「某些文本」並將其放入id =「new- [id]」?如何使用jQuery獲取id元素的一部分?

<span id="old-1">Some text</span> 
<span id="new-1"></span> 
<span id="old-5">Some text</span> 
<span id="new-5"></span> 

我不知道怎麼弄的id數字部分沒有substring()功能。 我覺得存在更正確的解決方案。 謝謝。

+0

爲什麼你不想使用'substring()'? – elclanrs 2012-02-11 02:17:20

+0

我認爲這會讓代碼在未來的html修改中變得更加靈活。 – vlad 2012-02-11 02:57:27

回答

7

至於你的問題是不完全清楚你的要求,我會爲您提供一堆不同的例子:

對於單個ID,你可以這樣做:

$("#new-1").text($("#old-1").text()); 

如果你有一堆,你想這樣做的順序編號的,你可以這樣做:

for (var i = 1; i <= 5; i++) { 
    $("#new-" + i).text($("#old-" + i).text()); 
} 

如果它是HTML,不只是文字,你可以使用的.html()代替的.text()的上面的代碼。

$("#new-1").html($("#old-1").html()); 

for (var i = 1; i <= 5; i++) { 
    $("#new-" + i).html($("#old-" + i).html()); 
} 

如果你想找到有以「OLD-」啓動和處理所有的人不管有多少,什麼數字是他們,你可以ID的所有對象做到這一點:

$('[id^="old-"]').each(function() { 
    var newid = this.id.replace(/old/, "new"); 
    $("#" + newid).html($(this).html()) 
}) 

這將創建一個擁有以「OLD-」,然後開始一個ID的所有對象的jQuery對象與「新」取代「舊」創造價值和使用目的的ID複製HTML從源頭到目的地。

如果你有一個名爲elem變量給定的對象,你想只提取的id值的數字部分,你可以使用常規expresssion匹配這樣的數字部分:

var matches = elem.id.match(/\d+$/); 
if (matches) { 
    var numString = matches[0]; 
} 
+0

感謝您的詳細回覆。倒數第二個例子就是我需要的。最後一個例子也很棒。 – vlad 2012-02-11 02:51:52

+0

這個「$('[id^=」old-「]')」是我需要循環選項卡。謝謝! – Andrejs 2015-06-12 09:00:46

0

這是你在找什麼?

var id = 1; 
$('#new-'+id).text($('#old-'+id).text()); 
0

JavaScript paseInt()函數將僅返回混合字符串/整數變量的整數部分。如果將$('#old-1).attr('id')的值存儲在變量中,然後parseInt,它應該只返回數字。

+0

我甚至不知道paseInt()函數,謝謝。 – vlad 2012-02-11 02:53:13

0

使用這樣的

$(document).ready(function() { 
    var el = $("#old-1"); 
    var oldId = el.attr('id').replace(/[A-Za-z$-]/g, ""); 
    $("#new-" + oldId).text(el.text()); 
}); 
+0

當然你也必須做錯誤處理... – 2012-02-11 02:29:03

4

我相信你想要檢索的ID 沒有前手知道它,這樣就可以複製該元素的文本。

如果這是正確的,這個簡短的jQuery函數將會這樣做。

$('span').each(function() 
    { 
     var idnum = $(this).attr('id').match(/[\d]/); 
     $('#new-' + idnum).text($(this).text()); 
    } 
); 

我創建了a jsfiddle來演示。

1

如果你想old-n跨度的所有被複制到相應的new-n跨度的內容那麼這應該這樣做:

$('span[id^="old-"]').each(function() { 
    $('#new-' + this.id.split('-')[1]).html($(this).html()); 
}); 

演示:http://jsfiddle.net/nnnnnn/bcXFf/

(通常我會用.substr()要做到這一點,因爲你已經知道數字出現的字符串內的位置,但既然你已經要求避免它,我用.split()來代替。)

^="attribute starts with" selector,所以上面的代碼選擇所有跨度爲id,以「old-」開頭,然後爲每個跨度找到相應的「新」跨度並將內容複製到其中。

0

我會用:

$(document).ready(function(){ 
    var spanText = $('#old-1').text(); 
    $('#old-1').text(null); 
    $('#new-1').text(spanText); 
}); 

,它將從舊的文本並把它放在新。 如果你必須這樣做,將多個id的,那麼你只需要編寫一個循環來通過它或使用$ .each方法遍歷所有的id。