如何使用 .html() 稍后更改文档中的内容

Posted

技术标签:

【中文标题】如何使用 .html() 稍后更改文档中的内容【英文标题】:How to use .html() to change content later in document 【发布时间】:2012-03-12 03:20:23 【问题描述】:

当我选中一个复选框时,我需要重写 2 个<p> 标签中的 html。注意:<div class="summary"> 容器会根据数据库的输出重复多次。

* HTML *

<div class="summary">
    <div>Data 1</div>
    <div>Data 2</div>
    <div class="col_5"><input type="checkbox" /></div>
</div>
<div class="details">
    <p>label:</p><p>info</p>
    <p>label 2:</p><p>more info</p>
    <p class="jQuery1">another label to be changed:</p><p class="jQuery2">final info to be changed</p>
</div>

* javascript(除 cmets 1 和 2 外,一切正常)*

$(document).ready(function()
    $('input:checkbox').change(function(event) 
        $(this).closest('div.col_5').html('Yes');
        $('div.details').next('p.jQuery1').html('Changed 1'); // c1 -- this does not work
        $('div.details').next('p.jQuery2').html('Changed 2'); // c2 -- this does not work
    );
    $('.summary').click(function(e)
        if ($("input:checked").length == 0) 
            $(this).next('.details').slideToggle('slow');
        
    );
);

【问题讨论】:

【参考方案1】:

使用find()children() 代替next()

$('div.details').find('p.jQuery1').html('Changed 1');

【讨论】:

除了改变每一个 p.jQuery* 外都有效——不仅仅是“下一个”。我只需要更改下一个实例。我会试试 children() 看看是否效果更好。 children() 和 find() 做了同样的事情——它改变了每个人的实例。【参考方案2】:

.next() 方法返回你调用它的元素的下一个 sibling,但是你试图找到你调用它的元素的 children 所以你应该使用.children()(只获取直系子代)或.find()(获取包括子代、孙代等在内的后代)。

尝试以下方法:

$('input:checkbox').change(function(event) 
    var $div = $(this).closest('div.col_5'),
        $nextDiv = $div.closest('div.summary').next('div.details');
    $div.html('Yes');
    $nextDiv.find('p.jQuery1').html('Changed 1');
    $nextDiv.find('p.jQuery2').html('Changed 2');
);

我保留对单击的复选框的父 div 的引用 ($div) 的原因是因为您需要它之后才能找到该 div,并且在覆盖div 的 html 带有字符串 'Yes',因为这会删除 this 所指的元素。

【讨论】:

抱歉,请参阅我的编辑。在调用.next() 之前,我的原始答案没有从.col_5 遍历到.summary【参考方案3】:

使用 find 而不是 next 因为您试图在 div 中查看具有类详细信息的子项

 $('div.details').find('p.jQuery1').html('Changed 1');

http://jsfiddle.net/HTaKV/2/

在第二个绑定中,您正在执行 slideToggle,因此更改的内容被隐藏了。所以我评论了那行以获得变化的可见性

【讨论】:

以上是关于如何使用 .html() 稍后更改文档中的内容的主要内容,如果未能解决你的问题,请参考以下文章

如何在html中具有多个连接的其他地方悬停文本时更改文本样式

如何将文档文件保存到 iOS 中的 SQLite 数据库,以便稍后在程序中查看它们?

如何动态更改破折号中的 html.Button 文本?

如何通过 AJAX 脚本检查已包含在 HTML 文档中的文件的更改?

如何使用 HTML 或 JavaScript 下载当前的 DOM?

如何更改php中的内容类型?