【问题标题】:Get a spans innerHTML inside a div在 div 中获取 spans innerHTML
【发布时间】:2015-02-28 09:19:20
【问题描述】:

嗨,我已经四处寻找了几天,我真的找不到任何东西,我想要的是在 div 中调用 span 并获取 spans innerHTMTL。 现在代码如下所示:

跨度如下所示:

function createTimer() {
        return document.createElement("span");
    }

如您所见,这个跨度在这个 div 内:

var Stopwatch = {
init: function(elem, options) {

    var timer = createTimer(),
    startButton = createButton("start", start),
    stopButton = createButton("stop", stop),
    resetButton = createButton("reset", reset),
    offset,
    clock,
    interval;

    options = options || {};
    options.delay = options.delay || 1;

    elem.appendChild(timer);
    elem.appendChild(startButton);
    elem.appendChild(stopButton);
    elem.appendChild(resetButton);

    reset();

    function createTimer() {
        return document.createElement("span");
    }

我尝试使用Stopwatch.span.innerHTML.stopwatch span.innerHTML 和许多其他不同的方式来调用它。您可以使用 .stopwatch span 在 css 中调用它,但这是我需要在按钮或类似 <button id="first" onclick=".stopwatch span.innerHTML;"></button> 的东西中调用它的问题。 但它不起作用!如果有任何问题,请提前询问并感谢! :)

更新:这是一个凌乱的 JsFiddle http://jsfiddle.net/dzcv9847/

【问题讨论】:

  • 你能做JSFiddle吗?
  • 是的,请稍等
  • @phillip100 我刚刚更新了我的帖子

标签: javascript html css timer innerhtml


【解决方案1】:

您必须深入研究函数并将var timer = createTimer(), 更改为this.timer = createTimer(); 才能使用Stopwatch.timer.innerHTML; 之类的东西,但是现在创建计时器的方式,无法访问该对象。

这无需更改即可工作:

window.onload=function() {
  var elems = document.getElementsByClassName("basic");
  for (var i = 0, len = elems.length; i < len; i++) {
    Stopwatch.init(elems[i]);
  }
  document.getElementById("first").onclick=function() {
    var val = document.querySelector('.stopwatch > span').innerHTML;
    document.getElementById("lap").innerHTML=val;
  }  
}

FIDDLE


更新:更优雅一点:

    lapButton = createButton("lap", lap),
    lapSpan = createTimer(),
    ...
    function lap() {
      lapSpan.innerHTML=timer.innerHTML;
    }

    function reset() {
        clock = 0;
        render(0);
        lap();
    }

FIDDLE

【讨论】:

  • 我建议第一种方法,调用者对秒表的内部结构了解较少。第三个我肯定会远离,因为它假定每页只有一个实例。
  • 三个我都试过了,第一个计时器消失,第二个什么也没发生,第三个计时器又消失了
  • 它可以工作,但现在我遇到了另一个问题,我有一个动画,当动画完成时计时器开始计时。但现在我不能调用该函数来启动计时器,这是一个 JsFiddle:jsfiddle.net/n7emsqzn/7。控制台说:“Uncaught TypeError: undefined is not a function”,因此即使我手动启动计时器,它也不会计时
  • 将动画之前的最后一个}移动到动画之后,即里面的window.onliad
【解决方案2】:

我会亲自在.basic div 元素中插入按钮(不要使用id,而是使用类):

<div class="basic stopwatch">
    <button class="get-timer" >Get milliseconds and display under this button onclick:</button>
    <div class=output></div>
</div>

然后:

[EDIT](已删除警告,指出 @mplungjan

var Stopwatch = {
    init: function(elem, options) {

        // ...
        var getTimerBtn = elem.getElementsByClassName("get-timer")[0];
        var outputElem =  elem.getElementsByClassName("output")[0];
        getTimerBtn.onclick = function(){
            outputElem.innerText = timer.innerText;
        }
        // ...

    }
}

这样,您可以拥有多个 timer 实例(参见演示),而无需分别为每个按钮重复代码。

DEMO

【讨论】:

  • @mplungjan,看看这个:jsfiddle.net/5cuno2se。这样,您可以拥有多个计时器实例,而无需为每个按钮和计时器重复代码。
  • @mplungjan ,必要时使用循环。在主元素之外拥有带有id 的按钮,您需要单独的代码来连接两个元素。
  • 这是一个新的创作(使用我的场景顺便说一句,按钮和输出在 elem 中移动。)。走这条路,我可以让它一种方式更快更短......(嗯......我的代码仍然更快更短:))
  • 当然我使用了你的想法,但我的实现,包括 HTML 比你当前的代码更短,更简单:) jsfiddle.net/mplungjan/5v4cx3om - 并且重置会重置计时器和圈数
  • 那么,你是说用javascript修改DOM比直接在HTML中设置元素要快吗?
猜你喜欢
  • 1970-01-01
  • 2014-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-14
  • 1970-01-01
相关资源
最近更新 更多