最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - Getting All Data-Bind Values Using JQuery - Stack Overflow

programmeradmin5浏览0评论
    function getDbValue()
{
    alert($('[data-bind]').length);
    alert($('[data-bind][0].data-bind'));
    alert($('[data-bind][0].value'));
    jQuery.each($('[data-bind]'), function(databind,key)
    {
        alert(key);
        alert(databind);
        alert(databind[key].data-bind);
    })

}

The above is my function and i want to read all inputs that have the properties data-bind within them for example

<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer" class="InputText"/>

^ When running my function i would want it to return 'AOfficer' as that is the data-bind value.

So an example is

<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer1" class="InputText"/>
<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer2" class="InputText"/>
<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer3" class="InputText"/>
<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer4" class="InputText"/>
<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer5" class="InputText"/>
<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer6" class="InputText"/>

And in the for each loop i would like to be able to use the value of data bind.. e.g values[0] = 'AOfficer1'

Sorry if my explanation is slightly confusing, i have the idea in my head perfect but trying to put it in writing is alot harder.

    function getDbValue()
{
    alert($('[data-bind]').length);
    alert($('[data-bind][0].data-bind'));
    alert($('[data-bind][0].value'));
    jQuery.each($('[data-bind]'), function(databind,key)
    {
        alert(key);
        alert(databind);
        alert(databind[key].data-bind);
    })

}

The above is my function and i want to read all inputs that have the properties data-bind within them for example

<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer" class="InputText"/>

^ When running my function i would want it to return 'AOfficer' as that is the data-bind value.

So an example is

<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer1" class="InputText"/>
<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer2" class="InputText"/>
<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer3" class="InputText"/>
<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer4" class="InputText"/>
<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer5" class="InputText"/>
<input type="text" id="frmIn1-Officer" data-bind="value: AOfficer6" class="InputText"/>

And in the for each loop i would like to be able to use the value of data bind.. e.g values[0] = 'AOfficer1'

Sorry if my explanation is slightly confusing, i have the idea in my head perfect but trying to put it in writing is alot harder.

Share Improve this question asked Jun 15, 2012 at 14:36 LemexLemex 3,79414 gold badges56 silver badges88 bronze badges 3
  • Have you tried jquery's .data() method? $('input').data('bind');? api.jquery./jQuery.data – Jason Towne Commented Jun 15, 2012 at 14:40
  • Yes but when using the for each statement and doing that i get Uncaught TypeError: Object 0 has no method 'data' – Lemex Commented Jun 15, 2012 at 14:42
  • 1 That's probably because in your for each loop you're using the native DOM element and not a jQuery object. Only an element wrapped in a jQuery object will have the .data() method. – Jason Towne Commented Jun 15, 2012 at 14:51
Add a ment  | 

5 Answers 5

Reset to default 5

jQuery interprets the "data-something" attributes differently than other attributes. So you should select all your elements and look for their data bindings like this:

$(document).ready(function(){
    $('input.InputText').each(function(){
        var input = $(this);
        if ($(input).data().bind) {
            alert($(input).data().bind);
        }
    });
});​

Then you can do string manipulation to parse out your values, I'd suggest using JSON and just loading it in like an object. Here's a working fiddle: http://jsfiddle/3NERK/6/

You can search for any element that has a data-bind attribute by the jQuery attribute selector - $("[data-bind]"), and then iterate on it with .each() and construct the dataBinds array out of it, stripping the value: out of each value.

This will do the trick:

dataBinds = [];
$("[data-bind]").each(function(){
     dataBinds.push($(this).attr("data-bind").substring(7));
});​​​​​​

I've set up an example of it: http://jsfiddle/dvirazulay/YPnwQ/

$( "[data-bind]" ).each( function() {
    var elem = $( this );
    alert( elem.data( "bind" ) );
});

http://jsfiddle/NhNhK/

Get all elements with data-bind attribute: $('[data-bind]')

Iterating these elements and manipulating the data-bind attribute:

$('[data-bind]').each(function(element,index){
  var data_bind = $(element).data('bind');
  alert(data_bind);
})

You can use the .data() method with .each() to acplish this.

DEMO

$('input').each(function() {
    var $this = $(this);

    alert($this.data('bind').replace("value: ", ""));            
});​
发布评论

评论列表(0)

  1. 暂无评论