0

Given this:

var formItems = [
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(0)"),
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(1)"),
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(2)"),
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(3)"),   
  ];

If there any way to simplify this:

var values = getValues(); // values.length is always equal to formItem.length
for (var i = 0; i < values.length; i++) {
  if (someCondition()) {
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(0)").val(values[i].abc);
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(1)").val(values[i].cde);
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(2)").val(values[i].abcdf);
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(3)").val(values[i].zyz);

}

1 Answer 1

1

I'm not sure what you want but perhaps like this?

var items = [
  { input: "div.class1.class2:visible:eq(0) div.class3 input:eq(0)", value: "abc" },
  { input: "div.class1.class2:visible:eq(0) div.class3 input:eq(1)", value: "cde" },
  { input: "div.class1.class2:visible:eq(0) div.class3 input:eq(2)", value: "abcdf" },
  { input: "div.class1.class2:visible:eq(0) div.class3 input:eq(3)", value: "zyz" }
];

var values = getValues();
for (var i = 0; i < values.length; i++) {
  if(this value is the right one) {
    for(var j in items) {
      $(item[j].input).val(values[i][items[j].value);
    }
  }
}

Edit 13:15

If this isn't what you mean by simplifying, you'll have to elaborate.

var formItems = [
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(0)"),
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(1)"),
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(2)"),
    $("div.class1.class2:visible:eq(0) div.class3 input:eq(3)"),   
  ];

var formValues = ["abc", "cde", "abcdf", "zyz"];

var values = getValues(); // values.length is always equal to formItem.length
for (var i = 0; i < values.length; i++) {
  if(this value is the right one) {
    for(var j in formItems) {
      formItems[j].val(values[i][formValues[j]);
    }
    break;
  }
}
Sign up to request clarification or add additional context in comments.

2 Comments

it might be but I have to have formItems untouched because they are used in other places.
I've altered my solution.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.