将Javascript对象与HTML容器匹配

时间:2012-01-10 19:00:23

标签: javascript jquery html

我已经采取了一些不同的方法来解决这个问题,但从来没有真正满意我的解决方案的不灵活性。我试图将在javascript中创建的对象映射到我的html文档中的容器。

让我举个例子。假设我在javascript中有一个电话号码对象:

var PhoneNumber = function(number, type) {
    this.number = number;
    this.type = type;
}

var myPhone = new PhoneNumber('5555555555', 'Home');

在我的html文档中,我有一系列DIV,它们基本上是空容器,等待前面提到的对象填充并显示给用户。

<div id="phoneNumberContainer">
    <div class="row">        
        <div id="number"></div>
        <div id="type"></div>
    </div>
</div>

现在,我希望在我的javascript中有一个函数,它将自动获取该电话号码对象并用其数据填充phoneNumberContainer元素。我有多种类型的具有不同参数的对象,因此它必须是通用的。

目前我发现自己做了很多这样的事情:

function mapPhoneNumber() {
    var numberContainer = document.getElementById('number');
    numberContainer.innerHTML = myPhone.number;

    var typeContainer = document.getElementById('type');
    typeContainer.innerHTML = myPhone.type;
}

当然可以正常工作,但它要求我为要映射的每个对象反复编写大量相同的代码。我希望有一种方法可以这样做,所以我可以将对象和容器传递给一个函数,它会根据对象自动填充DIV元素:

function mapPhoneNumber(phoneObject) {
    var phoneContainerChildren = document.getElementById('phoneNumberContainer').childNodes;
    for(x in phoneContainerChildren) {
        phoneContainerChildren[x] = myPhone.number;
    }
}

当然这不是一个有效的例子,因为容器的顺序不能保证与电话号码对象相同,并且孩子们在我的div等旁边会有其他类型的节点。我可以把手机放DIV元素的实际ID中的数字参数名称然后将其与对象匹配并在我有匹配时填充对象,但我不想在我的DIV元素上具有这样的特定ID,如果由另一个设计者更改将完全毁掉我的javascript。

有没有人对如何实现这样的事情有任何建议?我并不反对jQuery,因为我在我的解决方案中使用了很多。

3 个答案:

答案 0 :(得分:0)

我在许多项目中都使用类似的东西。

<div id="container">
    <div class="row">        
        <div class="prop"></div>
        <div class="propValue"></div>
    </div>
</div>

function BindValues(container, prop, propValue)
{
   container.find(".prop").val = prop; 
   container.find(".propValue").val = propValue;
return container;
}

答案 1 :(得分:0)

您可以向电话号码对象添加方法,并使用HTML中的类而不是ID,这样每页可以有多个。然后,所有代码都附加到对象上,您无需在每次需要时重新键入它:

<div id="homePhone" class="phoneNumberContainer">
    <div class="row">        
        <div class="number"></div>
        <div class="type"></div>
    </div>
</div>

var PhoneNumber = function(number, type) {
    this.number = number;
    this.type = type;
}

PhoneNumber.prototype.setHTML(dest) {
    var item = $(dest);
    item.find(".type").html(this.type);
    item.find(".number").html(this.number);
}

var myPhone = new PhoneNumber('5555555555', 'Home');
myPhone.setHTML("#homePhone");

要自动执行此操作,我们需要了解更多有关如何创建电话号码,如何创建HTML以及如何自动将其与另一个相关联的信息?你有一个PhoneNumber对象列表,你只想创建一堆相应的HTML?或者HTML已经存在并且您想要填充它吗?

答案 2 :(得分:0)

我不是100%确定这是否是您正在寻找的但我认为这可能是一个可能的解决方案:

var DOMable = {
  writeToDOM : function( node ){
    for( var i in this ) if( this.hasOwnProperty( i ) ){
      node.find( "." + i ).text( this[i] );
    }
  }
};
var PhoneNumber = function(number, type) {
  this.number = number;
  this.type = type;
};
PhoneNumber.prototype = DOMable;

var myPhone = new PhoneNumber('5555555555', 'Home');

然后你可以打电话:

myPhone.writeToDOM( jQuery( '#myPhone' ) );

表示HTML结构:

<div id="myPhone">
  <div class="number">
  </div>
  <div class="type">
  </div>
</div>