首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >span变化innerHTML

span变化innerHTML
EN

Stack Overflow用户
提问于 2017-07-14 09:22:51
回答 3查看 3.4K关注 0票数 3

我想改变一个跨度的innerHTML,但是我有一些问题。

我需要编辑的部分代码

代码语言:javascript
复制
<li class="mdl-step mdl-step--editable is-active">
                <span class="mdl-step__label">
                <span class="mdl-step__title">
                    <span class="mdl-step__title-text">Your Information</span>
                    <span class="mdl-step__title-message">Edit this step later</span>
                </span>
                    <span class="mdl-step__label-indicator"><span class="mdl-step__label-indicator-content">1</span>
                </span>
                </span>
                <div class="mdl-step__content">
                </div>
                <div class="mdl-step__actions">
                  <button class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--colored mdl-button--raised" data-stepper-next>
                        Continue
                      </button>
                  <button class="mdl-button mdl-js-button mdl-js-ripple-effect" data-stepper-cancel>
                        Cancel
                      </button>
                </div>
              </li>

我要换衣服

代码语言:javascript
复制
<span class="mdl-step__label-indicator"><span class="mdl-step__label-indicator-content">1</span>
                    </span>
                    </span>

代码语言:javascript
复制
 <span class="mdl-step__label-indicator">
<i class="material-icons mdl-step__label-indicator-content">check</i>
                        </span>

Javascript代码(但我让您更容易)

代码语言:javascript
复制
elements = steps[e].querySelectorAll("span.mdl-step__label > span.mdl-step__label-indicator");
                        alert(elements[0].innerHTML+" this better work");

                        elements[0].appendChild( document.createTextNode('<i class="material-icons mdl-step__label-indicator-content">check</i>') );

也试过

代码语言:javascript
复制
 var span = document.getElementByClass('li.is-active >  span.mdl-step__label-indicator");
       text = document.createTextNode("44546465");
        span.innerHTML = ''; // clear existing
        span.appendChild(text);                     

他们都不起作用。

完整HTML代码

代码语言:javascript
复制
 <section class="mdl-stepper">

    <div class="mdl-grid">
      <div class="mdl-cell mdl-cell--12-col">
       <!-- markup -->
        <ul class="mdl-stepper mdl-stepper--linear mdl-stepper--horizontal" id="ipet-stepper">
          <li class="mdl-step mdl-step--editable is-active">
            <span class="mdl-step__label">
            <span class="mdl-step__title">
                <span class="mdl-step__title-text">Your Information</span>
                <span class="mdl-step__title-message">Edit this step later</span>
            </span>
                <span class="mdl-step__label-indicator"><span class="mdl-step__label-indicator-content">1</span>
            </span>
            </span>
            <div class="mdl-step__content">
            </div>
            <div class="mdl-step__actions">
              <button class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--colored mdl-button--raised" data-stepper-next>
                    Continue
                  </button>
              <button class="mdl-button mdl-js-button mdl-js-ripple-effect" data-stepper-cancel>
                    Cancel
                  </button>
            </div>
          </li>
          <li class="mdl-step">
            <span class="mdl-step__label">
            <span class="mdl-step__title">
                <span class="mdl-step__title-text">Your Pets</span>
            </span>
                <span class="mdl-step__label-indicator"><span class="mdl-step__label-indicator-content">2</span>
            </span>
            </span>
            <div class="mdl-step__content"></div>
            <div class="mdl-step__actions">
              <button class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--colored mdl-button--raised" data-stepper-next>
                    Continue
                  </button>
              <button class="mdl-button mdl-js-button mdl-js-ripple-effect" data-stepper-cancel>
                    Cancel
                  </button>
            </div>
          </li>
          <li class="mdl-step">
            <span class="mdl-step__label">
            <span class="mdl-step__title">
                <span class="mdl-step__title-text">Emergency Contacts</span>
                <span class="mdl-step__title-message">Who should we contact if your pet goes missing?</span>
            </span>
                <span class="mdl-step__label-indicator"><span class="mdl-step__label-indicator-content">3</span>
            </span>
            </span>
            <div class="mdl-step__content"></div>
            <div class="mdl-step__actions">
              <button class="mdl-button mdl-js-button mdl-js-ripple-effect mdl-button--colored mdl-button--raised" data-stepper-next>
                    Continue
                  </button>
              <button class="mdl-button mdl-js-button mdl-js-ripple-effect" data-stepper-cancel>
                    Cancel
                  </button>
            </div>
          </li>
        </ul>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-07-14 09:31:14

这里有很多代码需要消化。我不知道从哪里开始,但有些问题突然出现了:

代码语言:javascript
复制
document.createTextNode(
    '<i class="material-icons mdl-step__label-indicator-content">check</i>')

不能创建包含HTML的文本节点,请执行以下操作:

代码语言:javascript
复制
var i = document.createElement('i');
i.style.className = 'material-icons mdl-step__label-indicator-content';
var text = document.createTextNode('check');
i.appendChild(text);

elements[0].appendChild(i);

或者(和慢一点)直接使用innerHTML

代码语言:javascript
复制
elements[0].innerHTML = 
    '<i class="material-icons mdl-step__label-indicator-content">check</i>';

然而,这确实清除了现有的内容(缓慢)。如果您想快速清除它,请使用:

代码语言:javascript
复制
var span = elements[0];
while (span.firstChild)
    span.removeChild(span.firstChild);

如果只想要第一个元素,请尝试:

代码语言:javascript
复制
// Replace
elements = steps[e].querySelectorAll(
    'span.mdl-step__label > span.mdl-step__label-indicator');

// With
element = steps[e].querySelector(
    'span.mdl-step__label > span.mdl-step__label-indicator');

接下来,您的嵌套可能已经关闭,而且它实际上并没有增加查询的性能,所以请尝试:

代码语言:javascript
复制
element = steps[e].querySelector(
    '.mdl-step__label .mdl-step__label-indicator');

// Or even
element = steps[e].querySelector('.mdl-step__label-indicator');

除非您在单个帧中多次执行此操作,否则innerHTML调用将比此慢得多。

票数 1
EN

Stack Overflow用户

发布于 2017-07-14 09:28:58

而不是使用appendChild,而是使用innerHTML替换该范围内的所有内容,

代码语言:javascript
复制
elements[0].innerHTML = '<i class="material-icons mdl-step__label-indicator-content">check</i>' ;

如果您仍然想使用appendChild,那么就不能简单地使用这样的标记。您需要使用document.createElement创建元素,然后使用需要使用appendChild插入新创建的元素。

使用 AppendChild

不知道steps[e]是什么,所以我用document代替

代码语言:javascript
复制
elements = document.querySelectorAll("span.mdl-step__label > span.mdl-step__label-indicator");
alert(elements[0].innerHTML+" this better work");

var iTag = document.createElement('i');
iTag.setAttribute('class', 'material-icons mdl-step__label-indicator-content');
iTag.innerHTML = 'check';

elements[0].appendChild(iTag) ;

注:这并不能取代一切。它将只更新span标记。

票数 0
EN

Stack Overflow用户

发布于 2017-07-15 09:21:57

代码语言:javascript
复制
While your span contain only one child span and you want to remove it so use empty function then use append to add the <i> tag

$(".mdl-step__label-indicator").empty();
$(".mdl-step__label-indicator").append('<i class="material-icons mdl-step__label-indicator-content">check</i>');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45099290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档