1

要素id、class、name、またはhrefのキーワードに基づいて特定の要素を見つけることができるようにクラスを作成しました。一致するものが見つかると、配列にプッシュされます。私はこれを単独で機能させることができましたが、クラスにしたとき、要素を配列にプッシュしません。すべての要素を検出するため、ある程度は機能しているように見えaますが、キーワードとは一致しません。ここで何が間違っているようですか?

HTML

<a href="linka.html" id="poll-answer-8234" class="ca" name="poll_430" value="8234">
<a href="linka.html" id="poll-answer-9234" class="ca" name="poll_430" value="9234">  
<a href="linkb.html" id="survey-answer-7866" class="cb" name="poll_430" value="7866">
<a href="linkb.html" id="survey-answer-8998" class="cb" name="poll_430" value="8998">
<a href="linkc.html" id="quiz-answer-7866" class="cc" name="poll_430" value="7866">
<a href="linkc.html" id="quiz-answer-8998" class="cc" name="poll_430" value="8998">

JS

function nodeBulder(parameters) {
    this.selecter = parameters.selecter;
    this.targets = [];
    this.nodes = document.getElementsByTagName(parameters.tag);
    this.keyword = parameters.keyword;
    this.build = function () {
        switch (this.selecter) {
            case "byid":
                var count, node;
                for (count = 0; count < this.nodes.length; count++) {
                    node = this.nodes[count].id.indexOf(this.keyword);
          console.log(node);
                    if (node === 0) {
                        this.targets.push(this.nodes[count]);
                    }
                }
                break;
            case "byname":
                var count, node;
                for (count = 0; count < this.nodes.length; count++) {
                    node = this.nodes[count].name.indexOf(this.keyword);
                    if (node === 0) {
                        this.targets.push(this.nodes[count]);
                    }
                }
                break;
            case "byclass":
                var count, node;
                for (count = 0; count < this.nodes.length; count++) {
                    node = this.nodes[count].className.indexOf(this.keyword);
                    if (node === 0) {
                        this.targets.push(this.nodes[count]);
                    }
                }
                break;
            case "byhref":
                var count, node;
                for (count = 0; count < this.nodes.length; count++) {
                    node = this.nodes[count].href.indexOf(this.keyword);
                    if (node === 0) {
                        this.targets.push(this.nodes[count]);
                    }
                }
                break;
        }
    }
    this.random = function () {
        return this.targets[Math.floor(Math.random() * this.targets.length)];
    }
}

var idTest = new nodeBulder({ selecter: "byid", tag: 'a', keyword: 'poll-answer' });
var classTest = new nodeBulder({ selecter: "byclass", tag: 'a', keyword: 'cc' });

console.log(idTest.targets);
console.log(classTest.targets);
4

1 に答える 1

2

問題は、buildメソッドを呼び出していないことです。

function nodeBulder(parameters) {
    this.selecter = parameters.selecter;
    this.targets = [];
    this.nodes = document.getElementsByTagName(parameters.tag);
    this.keyword = parameters.keyword;
    this.build = function () {
        switch (this.selecter) {
            case "byid":
                var count, node;
                for (count = 0; count < this.nodes.length; count++) {
                    node = this.nodes[count].id.indexOf(this.keyword);
          console.log(node);
                    if (node === 0) {
                        this.targets.push(this.nodes[count]);
                    }
                }
                break;
            case "byname":
                var count, node;
                for (count = 0; count < this.nodes.length; count++) {
                    node = this.nodes[count].name.indexOf(this.keyword);
                    if (node === 0) {
                        this.targets.push(this.nodes[count]);
                    }
                }
                break;
            case "byclass":
                var count, node;
                for (count = 0; count < this.nodes.length; count++) {
                    node = this.nodes[count].className.indexOf(this.keyword);
                    if (node === 0) {
                        this.targets.push(this.nodes[count]);
                    }
                }
                break;
            case "byhref":
                var count, node;
                for (count = 0; count < this.nodes.length; count++) {
                    node = this.nodes[count].href.indexOf(this.keyword);
                    if (node === 0) {
                        this.targets.push(this.nodes[count]);
                    }
                }
                break;
        }
    }
    this.random = function () {
        return this.targets[Math.floor(Math.random() * this.targets.length)];
    }
}

var idTest = new nodeBulder({ selecter: "byid", tag: 'a', keyword: 'poll-answer' });
idTest.build();
var classTest = new nodeBulder({ selecter: "byclass", tag: 'a', keyword: 'cc' });
classTest.build();

console.log(idTest.targets);
console.log(classTest.targets);

こちらのデモを確認してください

于 2013-01-06T15:48:00.410 に答える