首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原生Javascript选择

原生Javascript选择
EN

Stack Overflow用户
提问于 2014-01-31 06:25:18
回答 1查看 59关注 0票数 0

我需要使用本机Javascript,并且对于其中一些属性,我需要选择多个属性(例如,具有类和id的div )。以下是我到目前为止所获得的代码示例。该示例包含所有单项选择。

代码语言:javascript
复制
    var $ = function (selector) {
var elements = [];

var doc = document, i = doc.getElementsByTagName("div"),
    iTwo = doc.getElementById("some_id"), // #some_id
    iThree = doc.getElementsByTagName("input"),
    // ^ Lets say I wanted to select an input with ID name as well. Should it not be doc.getElementsByTagName("input").getElementById("idname")
    iFour = doc.getElementsByClassName("some_class"); // some_class

elements.push(i,iTwo,iThree,iFour);

return elements;
    };

哦,是的,我忘了说我根本不能使用querySelector……

EN

回答 1

Stack Overflow用户

发布于 2014-01-31 08:02:48

这取决于您要选择的属性。例如,您可能会传递如下所示的对象:

代码语言:javascript
复制
{tagname: 'div', class: 'foo'};

函数可能如下所示:

代码语言:javascript
复制
function listToArray(x) {
  for (var result=[], i=0, iLen=x.length; i<iLen; i++) {
      result[i] = x[i];
  }
  return result;
}

function getByProperties(props) {
  var el, elements;
  var baseProps = {id:'id', tagName:'tagName'};
  var result = [];

  if ('tagName' in props) {
    elements = listToArray(document.getElementsByTagName(props.tagName));

  } else if ('id' in props) {
    elements = [document.getElementById(props.id)];
  }

  for (var j=0, jLen=elements.length; j<jLen; j++) {
    el = elements[j];
    for (var prop in props) {

      // Include all with tagName as used above. Avoids case sensitivity
      if (prop == 'tagName' || (props.hasOwnProperty(prop) && props[prop] == el[prop])) {
        result.push(el);
      }
    }
  }
  return result;
}

// e.g.
getByProperties({tagName:'div', className:'foo'});

然而,这是一种过于简单的方法,它不会做像孩子或第n个选择器这样的事情。

您也许可以查看其他人的选择器函数(周围有几个),并遵循fork来支持非qSA浏览器。这些通常基于使用正则表达式标记选择器,然后手动应用选择器,与上面的类似,但范围更广。

它们还允许在某种程度上区分大小写的值(例如HTML值)和属性名称,以及在需要时将tagName属性名称映射到DOM属性名称(例如-> className类、-> htmlFor等)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21468738

复制
相关文章

相似问题

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