1

我正在寻找移动或复制 HTML 元素的内容。之前有人问过这个问题,我可以让 innerHTML() 或 Jquery 的 html() 方法工作,但我正在尝试自动化它。

如果元素的 ID 以 'rep_' 开头,则在下划线之后替换元素的内容。

所以,

<div id="rep_target">
Hello World.
</div>

将替换:

<div id="target">
Hrm it doesn't seem to work..
</div>​

我试过了:

$(document).ready(function() {
    $('[id^="rep_"]').html(function() {
        $(this).replaceAll($(this).replace('rep_', ''));
    });
});​

-和-

$(document).ready(function() {
    $('[id^="rep_"]').each(function() {
        $(this).replace('rep_', '').html($(this));
    });
​});​

两者似乎都不起作用,但是,这确实有效,只有手动:

var target = document.getElementById('rep_target').innerHTML;
document.getElementById('target').innerHTML = target;

相关,但这只是文字。 JQuery替换id中包含字符串的元素的所有文本

4

3 回答 3

2

第一部分有两个基本选项:替换为 HTML 字符串,或替换为实际元素。

选项 #1:HTML

$('#target').html($('#rep_target').html());

选项#2:元素

$('#target').empty().append($('#rep_target').children());

如果您没有偏好,则后一种选择更好,因为浏览器不必重新构建所有 DOM 位(每当浏览器将 HTML 转换为元素时,它需要工作并因此影响性能;选项 #2 避免了这种情况通过不让浏览器创建任何新元素来工作)。

那应该包括更换内部。您还想更改元素的 ID,并且只有一种方法(我知道)

var $this = $(this)
$this.attr($this.attr('id').replace('rep_', ''));

所以,把它们放在一起,就像:

$('[id^="rep_"]').each(function() {
    var $this = $(this)
    // Get the ID without the "rep_" part
    var nonRepId = $this.attr('id').replace('rep_', '');
    // Clear the nonRep element, then add all of the rep element's children to it
    $('#' + nonRepId).empty().append($this.children());

    // Alternatively you could also do:
    // $('#' + nonRepId).html($this.html());

    // Change the ID
    $this.attr(nonRepId);

    // If you're done with with the repId element, you may want to delete it:
    // $this.remove();
});

应该做的伎俩。希望有帮助。

于 2012-04-24T00:09:40.063 回答
1

使用方法获取 id attr,移除前缀,从中创建选择器,从元素中获取 HTML 代码,并从函数中返回:

$('[id^="rep_"]').html(function() {
  var id = $(this).attr('id');
  id = id.replace('rep_', '');
  var selector = '#' + id;
  return $(selector).html();
});

或者简单地说:

$('[id^="rep_"]').html(function() {
  return $('#' + $(this).attr('id').replace('rep_', '')).html();
});
于 2012-04-24T00:19:43.043 回答
0

根据我的问题,我的理解是您想通过删除 re-_ 前缀来替换 id,然后更改该 div 的内容。这个脚本会做到这一点。

$(document).ready(function() {
    var items= $('[id^="rep_"]');
    $.each(items,function(){
       var item=$(this);
       var currentid=item.attr("id");
       var newId= currentid.substring(4,currentid.length);
        item.attr("id",newId).html("This does not work");        
        alert("newid : "+newId);
    });    

});

工作示例:http: //jsfiddle.net/eh3RL/13/

于 2012-04-24T00:20:44.587 回答