【问题标题】:Check if an HTML element is expecting a source attribute检查 HTML 元素是否需要源属性
【发布时间】:2019-03-02 10:27:34
【问题描述】:

继我之前的问题之后。我做了一个辅助函数(见下文),将元素插入 DOM。该函数的一部分使用“instanceof”来确定“this”元素是否是 HTMLMediaElement 的实例,并通过参数“elemSrc”确定源属性。

我的问题:有没有办法检查一个元素是否“期望”一个要定义的源属性?我问的原因是,然后我可以将此函数用于“期望”定义源属性的所有元素。我知道我可以使用 instanceof 并删除每个使用 source 属性的元素,但如果可能的话,我更喜欢更流畅的方式。

function insertElem(numberOfElems, elemTag, elemId, elemClass, parentSelector, elemSrc){
    /*
    * numberOfElements:-    Pass in a whole integer.
    * elemTag:-             Pass in the element tag type (inside "" or '').              
    * elemId:-              Pass in a name for the element id (inside "" or ''),
                            an integer is appended to the id name by the for loop.
    * elemClass:-           Pass in a name for element class (inside "" or '').
    * parentSelector:-      Pass in the identifier of the parent element (inside "" or '')
                            * querySelector prefixes:    # = id
                                                         . = class
                                                         none = tag 
    *elemSrc:-              Pass in the source media url (inside "" or ''). 
    */      
      if (numberOfElems > 1) {
        for (i = 0; i < numberOfElems; i++) {
          var elem = this[elemId + i];
          elem = document.createElement(elemTag);
          elem.id = elemId + '_' + i;
             if (elemClass) {
                elem.className = elemClass;
             }
          parentEl = document.querySelector(parentSelector);
          parentEl.appendChild(elem);
            if(elem instanceof HTMLMediaElement) {
                elem.src = elemSrc;
            }
        }
      } else {
        var elem = this[elemId];
        elem = document.createElement(elemTag);
        elem.id = elemId;
            if (elemClass) {
                elem.className = elemClass;
            }
        parentEl = document.querySelector(parentSelector);
        parentEl.appendChild(elem);
           if(elem instanceof HTMLMediaElement) {
                elem.src = elemSrc;
          }
      }
    }

【问题讨论】:

  • 最好的选择是创建一个包含所有支持源属性的标签的数组,然后检查标签是否存在于数组中

标签: javascript src


【解决方案1】:

您可以检查src 是否作为键存在于 HTML 元素中。

if('src' in elem){
   //src is a valid attribute for elem
}

演示:

<label>Element Type: <input type="text" id="elemType"/></label>
<br/>
<button id="process">
Process
</button>
<p id="result">
</p>
<script>
var elemTypeInput = document.getElementById("elemType"), processBtn = document.getElementById("process"), res = document.getElementById("result");
processBtn.addEventListener("click", function(e){
	var elemType = elemTypeInput.value;
  if(!elemType.trim()){
  	res.textContent = "Element Type can not be empty!";
  } else {
    try{
    var elem = document.createElement(elemType);
    var hasSrc = 'src' in elem;
    res.textContent = elemType + " element has src attribute: " + hasSrc;
    } catch(e){
    	res.textContent = "Please enter a valid element type.";
    }
    }
});
</script>

【讨论】:

    【解决方案2】:

    这是更新后的功能:

    function insertElem(numberOfElems, elemTag, elemId, elemClass, parentSelector, elemSrc){
    /*
    * numberOfElements:-    Pass in a whole integer.
    * elemTag:-             Pass in the element tag type (as a string).              
    * elemId:-              Pass in a name for the element id (as a string),
                            an integer is appended to the id name by the for 
                            loop.
    * elemClass:-           Pass in a name for element class (as a string).
    * parentSelector:-      Pass in the identifier of the parent element 
                            (as a string).
                            * querySelector prefixes:    # = id
                                                         . = class
                                                         none = tag 
    *elemSrc:-              Pass in the source media url (as a string). 
    */      
      if (numberOfElems > 1) {
        for (i = 0; i < numberOfElems; i++) {
          var elem = this[elemId + i];
          elem = document.createElement(elemTag);
          elem.id = elemId + '_' + i;
             if (elemClass) {
                elem.className = elemClass;
             }
          parentEl = document.querySelector(parentSelector);
          parentEl.appendChild(elem);
            if('src' in elem) {
                elem.src = elemSrc;
            }
        }
      } else {
        var elem = this[elemId];
        elem = document.createElement(elemTag);
        elem.id = elemId;
            if (elemClass) {
                elem.className = elemClass;
            }
        parentEl = document.querySelector(parentSelector);
        parentEl.appendChild(elem);
           if('src' in elem) {
                elem.src = elemSrc;
          }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-07-09
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 2011-10-26
      • 1970-01-01
      • 2018-10-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多