Динамическое создание номеров шагов в jquery

есть способ получить код возврата без try / except?

check_output вызывает исключение, если он получает ненулевой статус выхода, поскольку он часто означает, что команда не удалась. grep может возвращать ненулевой статус выхода, даже если нет ошибки - вы могли бы использовать .communicate() в этом случае:

from subprocess import Popen, PIPE

pattern, filename = 'test', 'tmp'
p = Popen(['grep', pattern, filename], stdin=PIPE, stdout=PIPE, stderr=PIPE,
          bufsize=-1)
output, error = p.communicate()
if p.returncode == 0:
   print('%r is found in %s: %r' % (pattern, filename, output))
elif p.returncode == 1:
   print('%r is NOT found in %s: %r' % (pattern, filename, output))
else:
   assert p.returncode > 1
   print('error occurred: %r' % (error,))

Вам не нужно вызывать внешнюю команду для фильтрации линии, вы можете сделать это в чистом Python:

with open('tmp') as file:
    for line in file:
        if 'test' in line:
            print line,

Если вам не нужен вывод; вы можете использовать subprocess.call():

import os
from subprocess import call
try:
    from subprocess import DEVNULL # Python 3
except ImportError: # Python 2
    DEVNULL = open(os.devnull, 'r+b', 0)

returncode = call(['grep', 'test', 'tmp'], 
                  stdin=DEVNULL, stdout=DEVNULL, stderr=DEVNULL)
0
задан dev4life 19 February 2019 в 16:28
поделиться

4 ответа

  1. Для каждой из групп получите внутренний html и разделите его на новую строку
  2. Если он начинается с «----», замените его на увеличивающийся номер строки и добавьте [ 113] значение.
  3. Поместите HTML обратно в группу.

$('.grouping').each(function(index, grouping){
  var lines = grouping.innerHTML.trim().split("\n");
  var lineNumber = 0;
  var v = grouping.getAttribute('v');
  
  lines.forEach(function(line, index){
    if (line.startsWith('----')) {
      lines[index] = '('+ (++lineNumber) + v +') '+ line.slice(4);
    }
  });
  
  grouping.innerHTML = lines.join('\n');
});
.grouping { white-space: pre; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span class="grouping" v="a">
----My first step
----This is another
I should not have a line number.
----And another
</span>
<br/>
<span class="grouping" v="b">
I also should not have a line number.
----second group
----second group 2
</span>

0
ответ дан Taplar 19 February 2019 в 16:28
поделиться

.find() не будет работать. Вы должны получить текст элемента и split() его, а затем изменить его, используя map() и replace() и сбросить text()

$(function(){
    $(".grouping").each(function(){
        
        var val=$(this).attr("v");
        var counter=1;
        let lines = $(this).text().split('\n');
        lines = lines.map(ln => {
          if(ln.includes('----')){
            ln = ln.replace('----',`(${counter}${val})`)
            counter++;
          }
          return ln;
        })
        lines = lines.filter(ln => ln !== '');
        $(this).text(lines.join('\n'));
    });
});
.grouping { white-space: pre; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span class="grouping" v="a">
----My first step
----This is another
----And another
</span>
<br/>
<span class="grouping" v="b">
----second group
----second group 2
</span>

0
ответ дан Maheer Ali 19 February 2019 в 16:28
поделиться

Во-первых, я предлагаю заключить эти группы в какую-то метку. например, span:

<span class="grouping" v="a">
 <span class="grouping-item">My first step</span>
</span>

И так далее, будет проще и быстрее нацеливать эти элементы.

Затем создайте одну функцию для поиска по этим новым тегам

$(function(){
  // This will create those numbers
  function createNumbers(el) {
    const mainGroup = el.attr("v");
    const children = el.children(".grouping-item");
    let i = 1;
    children.each(function(){
      const currentText = $(this).text();
      $(this).text( '('+i+mainGroup+')' + currentText );
      i++;
    });
  }
  $(".grouping").each(function(){
    createNumbers($(this));
  });
});
.
0
ответ дан Mr Shumar 19 February 2019 в 16:28
поделиться

Вы можете использовать split, чтобы разделить текст в '----' и согласовать со значениями (добавлено br для упрощения, поэтому я использовал html вместо text):

[ 117]

$(function(){
    $(".grouping").each(function(){
        var val=$(this).attr("v");
        var arr = $(this).html().split('----');
        if(arr.length > 1){
            var str = arr[0], i, l = arr.length;
            for(i = 1; i < l; i++){
                str += '(' + i + val + ') ' + arr[i];
            }
            $(this).html(str);
        }
    });
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<span class="grouping" v="a">
----My first step<br>
----This is another<br>
----And another<br>
</span>
<br/>
<span class="grouping" v="b">
----second group<br>
----second group 2<br>
</span>

0
ответ дан Kaddath 19 February 2019 в 16:28
поделиться
Другие вопросы по тегам:

Похожие вопросы: