2016-08-23 43 views
0

我有一些代碼:如何有兩個對象的JavaScript

function webdata(){ 
    this.page = function(e){ 
    return document.querySelectorAll(e); 
    this.append = function(t){ 
     e.innerHTML += t; 
    } 
    }; 
} 

var wb = new webdata(); 

當過我打電話:wb.page("html").append("Text");

我得到:TypeError: wb.page(...).append is not a function

我需要具有對象的內部對象的方法像jQuery。例如$("html").append("Text");

+0

jQuery使用鏈接概念,檢查這個[鏈接](http://schier.co/blog/2013/11/14/method-chaining-in-javascript.html) – Abanoub

+1

那麼你返回的html集合,和它從未運行後的代碼。之後,'e'是一個字符串,而一個字符串沒有innerHTML。你需要返回一個擁有你的方法的對象。 – epascarello

+0

移動'this.append = function(t){e.innerHTML + = t; '到外面this.page。然後它會毫無錯誤地運行。不能保證輸出。 –

回答

0

夫婦失誤

  1. return document.querySelectorAll(e);被返回NodeList頁函數,其中NodeList沒有append方法
  2. this.append永遠不會叫

可以修改爲下面的代碼可以工作

function webdata(){ 
    this.page = function(e){ 
    e = document.querySelectorAll(e); // Get All Nodes 
    this.append = function(t){ 
     e.forEach(function(elm){ // Perform operation on each node and append text to that node 
     elm.innerHTML += t; 
     }); 
     return this; // Provide chaining for next nodes .append('abc').append('pqr') 
    } 
    return this; // .page('div').append will be availabel 
    }; 
} 

var wb = new webdata(); 
//Now this will work 
wb.page(".question-hyperlink").append('abc').append('pqr'); 
+0

我得到一個錯誤'TypeError:e.forEach不是一個函數' –

+0

我已經在Chrome 52.0.2743.116上測試過,正常工作 – JagsSparrow

+0

我使用的是firefox v。48.0.2 –

相關問題