【问题标题】:jQuery changing html inside a div class thats inside a divjQuery在div内的div类中更改html
【发布时间】:2012-11-28 23:13:50
【问题描述】:

我将如何只更改此 HTML:

<div class="name">President Speech</div>

在这个 div 里面:

<div class="videobox fl showsearchvideo" id="videoBox7">
  <div class="videothumb">
     <img src="http://brightcove04.o.brightcove.com/xxxxx/xxxx_xxxxx_xx-xxxxxx.jpg?pubId=xxxxxxx">
  </div>
  <div class="name">President Speech</div>
</div>

我试过了:

$('#videoBox7 .name').html('President Speech TEST!');

但这似乎不起作用?

更新

在视频 div 运行 JS 以填充它正在寻找的 HTML 之后,它似乎没有触发。

<script type="text/javascript">
   $(document).ready(function() {
      $('#videoBox7 .name').html('President Speech TEST!');
   });
</script>

我已将填充视频的 JS 上传到 http://pastebin.com/DNBPNQUQ

更新 2

通过将$('#videoBox7 .name').html('President Speech TEST!'); 放在brightstar js 的onPlaylistLoad 函数中找到了一种方法。

【问题讨论】:

  • 您提供的应该可以正常工作;发生了什么?打开您的 F12 开发者工具并检查您的控制台是否有错误。
  • 哼.. 似乎没有在正确的时间启动。我在 $(document).ready 下有它,但它由我正在寻找的视频的 js 填充,所以我猜代码在执行时还没有完成?
  • 你的代码在哪里引入这个标记?
  • 当我只有一个
    测试!
    并在所有内容似乎都用我的鼠标手动加载后单击它,它确实改变了它。
  • 但是您将#videoBox7 添加到DOM 的代码在哪里?听起来好像您建议它最初不存在,而是在页面加载后动态添加。是这样吗?

标签: jquery html


【解决方案1】:

确保仅在将 HTMLDivElement 添加到 DOM 后运行此代码:

$(function(){
    $('#videoBox7 .name').html('President Speech TEST!');
});

a chat 与作者联系之后,很明显问题在于 Brightcove 视频播放器加载新元素以反映视频播放列表。在这一点上,明确的解决方案是绑定到 Brightcove 玩家的事件系统,以便在添加元素后响应。

【讨论】:

  • 你是否暗示这个脚本应该在那个特定元素之后?因为您的脚本可以(并且应该)位于 HTML 文档的头部。
  • @RobertKoritnik 上面的例子可以放在任何地方,并且会等到文档准备好再执行。关于可以放置脚本的位置,如果您愿意,也可以将它们放置在 body 中 - 根据规范这样做是完全合法的。
  • @RobertKoritnik 将脚本放在头脑中是个坏主意,除非您绝对需要它们。无论您的脚本在哪里,$(document).ready()$(function(){}) 都可以正常工作。
  • @Stephen:等一下,伙计们......我只是说我按字面意思理解乔纳森的陈述,他说运行这段代码之后 div 已添加。并且这段代码 不仅仅是处理程序中的代码,而是整个 DOM 就绪处理程序定义......不仅仅是第 2 行,而是所有三行。我不想说我不知道​​如何使用 jQuery。为了皮特,我有一个 jQuery 徽章...... :)
  • 感谢您的所有帮助@JonathanSampson!
【解决方案2】:

你应该有什么工作见http://jsfiddle.net/wRgDE/

确保在准备好的文档上运行它

$(document).ready(function(){
  $('#videoBox7 .name').html('President Speech TEST!');
});

【讨论】:

  • 我不明白为什么人们使用 长符号 来提供 DOM Ready 处理程序...为什么不只是 $(function() { ... });
  • @RobertKoritnik 因为对于那些不熟悉 jQuery 如何处理各种参数类型的人来说,长格式更容易理解。
  • @JonathanSampson:我同意这对不使用 jQuery 的人来说可能是有价值的信息,但那些使用 jQuery 的人应该熟悉它。而$() 是每个人学习 jQuery 的第一件事。您的意思与汽车制造商将方向盘放在方向盘上给那些不知道如何驾驶的人一样。
  • @RobertKoritnik 实际上,很少有人知道 jQuery 如何评估传递给它的 init 方法的参数的type
  • 感谢您花时间评论和帮助我,@Dominic Green。
【解决方案3】:

你可以简单地给这个

  <div class="name">President Speech</div> 

一个id,例子

 <div id = "myid" class="name">President Speech</div>

然后像这样通过 jquery 到达它

    $('#myid').html('President Speech TEST!');

或看这里Getting the 2nd child element 并查看如何获得第 n 个孩子,以及如何获得第二个孩子。

【讨论】:

  • 感谢彼得的帮助。
【解决方案4】:

你需要使用.text()

.text() 函数实际上非常聪明。您可以将文本从对象中提取出来,jQuery 就会知道您想要什么。你的 jQuery 应该是:

$("#videoBox7 .name").text("President Speech TEST!");

您还需要确保在整个文档加载准备好后触发jQuery运行。如果元素尚未准备好,您不想尝试定位此选择器。使用这个:

$(function () {
    $("#videoBox7 .name").text("President Speech TEST!");
});

【讨论】:

  • 使用.html() 是完全有效的。
  • 我的错,我刚刚用 .text 进行了测试,并认为我会立即发布解决方案。 .html 有效,但如果要更改文本,为什么不使用 .text 呢?如果您正在编写一个更改元素文本的函数,您会将这个函数命名为 changeHTML 还是 changeText?你觉得哪个更清楚?如果您不是编写此代码的开发人员,并且您看到了一个名为 changeHTML 的复杂函数,您是否能够初步断定它只更改文本?不,我认为它的变化不仅仅是文本。现在 changeText 呢?我很确定这更清楚了。
  • 他确实应该使用.text,因为他所处理的只是文本,但如果.html 不起作用,我希望这个也不会。
  • @Tom:他正在传递一个只包含文本的字符串——我一直这样做是为了测试——但这并不意味着代码只会传递一个文本字符串。最终结果是更改元素的 content,所以我总是默认使用.html(),因为它会处理我只传入文本的情况和传入的情况一个包含 HTML 的字符串。
  • .text 确实有效。我在帖子中指出,他们必须记住在加载文档后应用 jquery。很确定这就是他的问题所在。我启动了一个快速的 jsfiddle,并在 5 秒内能够使用 .text() 更改 div 的文本。不知道为什么对这个问题的完全可以接受的答案投了反对票。 OP 从未询问或声明他们需要使用 .html() 他们只是询问如何更改文本。我提供了所有有效信息。
猜你喜欢
  • 2018-07-06
  • 1970-01-01
  • 2011-10-31
  • 2012-09-25
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多