动态命名部分div以供以后使用?

时间:2016-01-15 19:37:09

标签: javascript jquery html asp.net-mvc

我有一个包含div的局部视图,然后div id当前是静态的。如果我多次使用这个局部视图,我的Javascript类只加载第一个div。为这些div提供唯一ID的MVC约定是什么,所以这不会再发生了?生成一个随机数会起作用吗?

示例代码:

<div id="test"></div>

<script type="text/javascript">
  var loader = new Class('test');
</script>

理想情况下,我喜欢它,所以每次渲染局部视图时,都会在id="test附加一个递增的数字。

1 个答案:

答案 0 :(得分:2)

似乎有很多方法可以解决这个问题。看起来重要的是你能够在加载后引用JS类中的附加元素。我想到了几种方法。

1)通过JS动态添加div(我在这里使用jquery来简化任务):

添加到您的班级定义:

<script type='text/javascript' >
  /* you need to add a static method to your class to create
     a unique id.

     Note that this should not be part of your partial view - it
     is only defined once - wherever you have defined your class.
   */
  Class.idNum = 0;
  Class.uniqueId = function() { return 'MyDiv_' + idNum++; };

</script>

部分变为:

<script type='text/javascript' >

  // you need to have a 
  var newId = Class.uniqueId();
  var newDiv = jQuery('<div id="' + newId + '" />' );

  // figure out where you need to append it, e.g. to the html body:
  jQuery('body').append( newDiv );

  var loader = new Class( newId );

</script>

2)然而,一个更简单的方法可能完全避免使用id,这在我的经验中更常见于这种动态代码中。在此解决方案中,您通过partials添加所有div,将它们标识为具有唯一类名的组,然后引用该类名称以将所有这些div作为一个组抓取并迭代它们以创建类。当然,您必须重写您的类以通过其DOM元素而不是ID属性来引用这些div。

部分变为:

<div class='MyDescriptiveClassName' ></div>

然后,在添加了所有部分之后,您将拥有类似以下javascript的内容:

<script type='text/javascript' >

  jQuery('.MyDescriptiveClassName').each( function( index, elem ) {
    // pass in the DOM element for accessing this div.
    var loader = new Class( elem );
  });

</script>

希望有所帮助。